connection->executeQuery($sql); $carRevisions = []; $mapper = new ModelMapper(); foreach ($result->fetchAllAssociative() as $row) { $carRevisions[] = $mapper->map($row); } return new CarRevisionCollection($carRevisions); } public function findById(CarRevisionId $carRevisionId): ?CarRevision { $sql = 'SELECT * FROM car_revisions WHERE id = ?'; $result = $this->connection->executeQuery($sql, [$carRevisionId->value]); $row = $result->fetchAssociative(); if ($row === false) { return null; } $mapper = new ModelMapper(); return $mapper->map($row); } public function findByCarModelId(CarModelId $carModelId): CarRevisionCollection { $sql = 'SELECT * FROM car_revisions WHERE car_model_id = ? ORDER BY name ASC'; $result = $this->connection->executeQuery($sql, [$carModelId->value]); $carRevisions = []; $mapper = new ModelMapper(); foreach ($result->fetchAllAssociative() as $row) { $carRevisions[] = $mapper->map($row); } return new CarRevisionCollection($carRevisions); } public function save(CarRevision $carRevision): void { $sql = 'INSERT INTO car_revisions (id, car_model_id, name) VALUES (?, ?, ?) ON CONFLICT (id) DO UPDATE SET car_model_id = EXCLUDED.car_model_id, name = EXCLUDED.name'; $this->connection->executeStatement($sql, [ $carRevision->carRevisionId->value, $carRevision->carModelId->value, $carRevision->name ]); return; } public function delete(CarRevision $carRevision): void { $sql = 'DELETE FROM car_revisions WHERE id = ?'; $this->connection->executeStatement($sql, [$carRevision->carRevisionId->value]); } public function deleteAll(): void { $this->connection->executeStatement('DELETE FROM car_revisions'); } }