/
AleksWork
/
diary_plants
Обзор
Документация
Войти
/
AleksWork
/
diary_plants
Код
Пакеты
0
Релизы
0
Аналитика
Безопасность
develop
src/Infrastructure/Repository/PestRepository.php
184 строки
4 KB
AlexeySerov
Add vote to Pest managers
12 май 2026, 16:59
12 май 2026, 16:59
0cde7d6
Код
Авторство
О чём код?
<?php namespace App\Infrastructure\Repository; use Exception; use DateTimeImmutable; use App\Domain\Entity\Pest; use Doctrine\ORM\QueryBuilder; class PestRepository extends AbstractRepository { /** * @return QueryBuilder */ private function getBaseQueryBuilder(): QueryBuilder { $queryBuilder = $this->entityManager->createQueryBuilder(); return $queryBuilder->select('p', 'g', 'm') ->from(Pest::class, 'p') ->leftJoin('p.group', 'g') ->leftJoin('p.marker', 'm') ->orderBy('p.updatedAt', 'DESC'); } /** * @param int $groupId * @return Pest[] */ public function getPestsForDairy(int $groupId): array { return $this->getBaseQueryBuilder() ->andWhere('p.group = :groupId') ->setParameter('groupId', $groupId) ->getQuery() ->getResult(); } /** * @param int $page * @param int $perPage * @return Pest[] * @throws Exception */ public function getPestsPaginated(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 $groupId * @return Pest[] * @throws Exception */ public function getPestsPaginatedByGroupId(int $page, int $perPage, ?int $groupId = null): array { $queryBuilder = $this->getBaseQueryBuilder(); $qb = $queryBuilder ->setFirstResult(($page - 1) * $perPage) ->setMaxResults($perPage); if ($groupId !== null) { $qb->where('p.group = :groupId') ->setParameter('groupId', $groupId); } return $this->getPaginatedResults($queryBuilder, $page, $perPage); } /** * @param int $pestId * @return Pest|null */ public function find(int $pestId): ?Pest { return $this->getBaseQueryBuilder() ->andWhere('p.id = :id') ->setParameter('id', $pestId) ->getQuery() ->getOneOrNullResult(); } /** * @return Pest[] */ public function findAll(): array { return $this->getBaseQueryBuilder() ->getQuery() ->getResult(); } /** * @return Pest[] */ public function findAllByGroupId(?int $groupId = null): array { $queryBuilder = $this->entityManager->createQueryBuilder(); $qb = $queryBuilder->select('p') ->from(Pest::class, 'p') ->orderBy('p.title', 'ASC'); if ($groupId !== null) { $qb->where('p.group = :groupId') ->setParameter('groupId', $groupId); } return $qb->getQuery()->getResult(); } /** * @param string $title * @return Pest[] */ public function findPestsByTitle(string $title): array { return $this->getBaseQueryBuilder() ->andWhere('p.title = :title') ->setParameter('title', $title) ->getQuery() ->getResult(); } /** * @param string $manufacturer * @return Pest[] */ public function findPestsByManufacturer(string $manufacturer): array { return $this->getBaseQueryBuilder() ->andWhere('p.manufacturer = :manufacturer') ->setParameter('manufacturer', $manufacturer) ->getQuery() ->getResult(); } /** * @param DateTimeImmutable $date * @return Pest[] */ public function findPestsByUseDate(DateTimeImmutable $date): array { return $this->getBaseQueryBuilder() ->andWhere('p.useDate = :date') ->setParameter('date', $date) ->getQuery() ->getResult(); } /** * @param Pest $pest * @return int */ public function create(Pest $pest): int { return $this->store($pest); } /** * @return void */ public function update(): void { $this->flush(); } /** * @param Pest $pest * @return void */ public function remove(Pest $pest): void { $pest->setDeletedAt(); $this->flush(); } }