register('configuration', (new Implement\Repository\Mapper()) ->setFunction(function($data) { return json_decode($data['configuration'], true); })) ->register('executed', new Implement\Repository\Mapper\Boolean('executed')); return $this->parseData(new Model\Job(), $data, $map); } public function save(Define\Model $model): Model\Job { $model->id = $this->saveNew(['configuration', 'executed', 'created_at'], [json_encode($model->configuration), $model->executed, (new DateTimeImmutable())->format('Y-m-d H:i:s.u')]); return $model; } public function edit(Define\Model $model, array $new_data): Model\Job { if (isset($new_data['configuration']) and !is_string($new_data['configuration'])) { $new_data['configuration'] = json_encode($new_data['configuration']); } return $this->update($model, ['configuration', 'executed', 'updated_at'], array_merge($new_data, ['updated_at' => (new DateTimeImmutable())->format('Y-m-d H:i:s.u')])); } /** * @return array * @throws Implement\Exception\EmptyResult */ public function fetchPending(): array { $query = $this->connection->getQueryBuilder() ->select() ->from($this->getTable()) ->where('executed = ?'); return $this->fetchMany($query, [false]); } }