/
AleksWork
/
diary_plants
Обзор
Документация
Войти
/
AleksWork
/
diary_plants
Код
Пакеты
0
Релизы
0
Аналитика
Безопасность
develop
src/Infrastructure/Repository/RepottingRepository.php
145 строк
3 KB
AlekseySerov
Add voter to Repotting managers
09 май 2026, 00:36
09 май 2026, 00:36
06e1c80
Код
Авторство
О чём код?
<?php namespace App\Infrastructure\Repository; use Exception; use DateTimeImmutable; use Doctrine\ORM\QueryBuilder; use App\Domain\Entity\Repotting; class RepottingRepository extends AbstractRepository { /** * @return QueryBuilder */ private function getBaseQueryBuilder(): QueryBuilder { $queryBuilder = $this->entityManager->createQueryBuilder(); return $queryBuilder->select('r', 'p', 'g') ->from(Repotting::class, 'r') ->leftJoin('r.plant', 'p') ->leftJoin('p.analytic', 'a') ->addSelect('a') ->leftJoin('r.group', 'g') ->orderBy('r.updatedAt', 'DESC'); } /** * @return Repotting[] * @throws Exception */ public function getRepottingsPaginated(int $page, int $perPage): array { $queryBuilder = $this->getBaseQueryBuilder() ->setFirstResult(($page - 1) * $perPage) ->setMaxResults($perPage); return $this->getPaginatedResults($queryBuilder, $page, $perPage); } /** * @param int $page * @param int $perPage * @param int|null $groupId * @return Repotting[] * * @throws Exception */ public function getRepottingsPaginatedByGroupId(int $page, int $perPage, ?int $groupId = null): array { $queryBuilder = $this->getBaseQueryBuilder(); $qb = $queryBuilder ->setFirstResult(($page - 1) * $perPage) ->setMaxResults($perPage); if ($groupId !== null) { $qb->where('r.group = :groupId') ->setParameter('groupId', $groupId); } return $this->getPaginatedResults($queryBuilder, $page, $perPage); } /** * @param int $repottingId * @return Repotting|null */ public function find(int $repottingId): ?Repotting { return $this->getBaseQueryBuilder() ->andWhere('r.id = :id') ->setParameter('id', $repottingId) ->getQuery() ->getOneOrNullResult(); } /** * @return Repotting[] */ public function findAll(): array { return $this->getBaseQueryBuilder() ->getQuery() ->getResult(); } /** * @param ?int $groupId * @return Repotting[] */ public function findAllByGroupId(?int $groupId = null): array { $queryBuilder = $this->getBaseQueryBuilder(); $qb = $queryBuilder; if ($groupId !== null) { $qb->where('r.group = :groupId') ->setParameter('groupId', $groupId); } return $qb->getQuery()->getResult(); } /** * @param DateTimeImmutable $repottedAt * @return Repotting[] */ public function findRepottingsByRepottedAt(DateTimeImmutable $repottedAt): array { return $this->getBaseQueryBuilder() ->andWhere('r.repottedAt = :repottedAt') ->setParameter('repottedAt', $repottedAt) ->getQuery() ->getResult(); } /** * @param Repotting $repotting * @return int */ public function create(Repotting $repotting): int { return $this->store($repotting); } /** * @return void */ public function update(): void { $this->flush(); } /** * @param Repotting $repotting * @return void */ public function remove(Repotting $repotting): void { $repotting->setDeletedAt(); $this->flush(); } }