setTable('messages_states') ->setFactory($factory); } protected \ProVM\Common\Factory\Model $factory; public function getFactory(): \ProVM\Common\Factory\Model { return $this->factory; } public function setFactory(\ProVM\Common\Factory\Model $factory): Message { $this->factory = $factory; return $this; } protected function fieldsForUpdate(): array { return $this->fieldsForInsert(); } protected function valuesForUpdate(Model $model): array { return array_merge($this->valuesForInsert($model), [$model->getId()]); } public function fieldsForInsert(): array { return [ 'message_id', 'name', 'value' ]; } protected function valuesForInsert(Model $model): array { return [ $model->getMessage()->getId(), $model->getName(), $model->getValue() ? 1 : 0 ]; } protected function defaultFind(Model $model): Model { return $this->fetchByMessageAndName($model->getMessage()->getId(), $model->getName()); } protected function fieldsForCreate(): array { return $this->fieldsForInsert(); } protected function valuesForCreate(array $data): array { return [ $data['message_id'], $data['name'], $data['value'] ? 1 : 0 ]; } protected function defaultSearch(array $data): Model { return $this->fetchByMessageAndName($data['message_id'], $data['name']); } public function load(array $row): \ProVM\Emails\Model\State\Message { return (new \ProVM\Emails\Model\State\Message()) ->setId($row['id']) ->setName($row['name']) ->setMessage($this->getFactory()->find(\ProVM\Emails\Model\Message::class)->fetchById($row['message_id'])) ->setValue(($row['value'] ?? 0) !== 0); } public function fetchByMessage(int $message_id): array { $query = "SELECT * FROM `{$this->getTable()}` WHERE `message_id` = ?"; return $this->fetchMany($query, [$message_id]); } public function fetchByMessageAndName(int $message_id, string $name): \ProVM\Emails\Model\State\Message { $query = "SELECT * FROM `{$this->getTable()}` WHERE `message_id` = ? AND `name` = ?"; return $this->fetchOne($query, [$message_id, $name]); } }