* * @method Feedback|null find($id, $lockMode = null, $lockVersion = null) * @method Feedback|null findOneBy(array $criteria, array $orderBy = null) * @method Feedback[] findAll() * @method Feedback[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null) */ class FeedbackRepository extends ServiceEntityRepository { use QueryHelperTrait; public function __construct(ManagerRegistry $registry) { parent::__construct($registry, Feedback::class); } public function getListQuery(FeedbackFilterDto $filterDto): Query { $qb = $this->createQueryBuilder('feedback'); $qb ->select('feedback', 'teamer') ->innerJoin('feedback.teamer', 'teamer') ; if (null !== $name = $filterDto->getName()) { $qb ->andWhere($qb->expr()->orX( $qb->expr()->like('teamer.firstName', ':name'), $qb->expr()->like('teamer.lastName', ':name') )) ->setParameter('name', '%'.$this->escapeLikeWildcards($name).'%') ; } if (null !== $rating = $filterDto->getAverageRating()) { $qb ->andWhere($qb->expr()->gte('feedback.averageRating', ':rating')) ->setParameter('rating', $rating) ; } if (null !== $dateFrom = $filterDto->getDateFrom()) { $qb ->andWhere($qb->expr()->gte('feedback.assignmentDateFrom', ':dateFrom')) ->setParameter('dateFrom', $dateFrom) ; } if (null !== $dateTo = $filterDto->getDateTo()) { $qb ->andWhere($qb->expr()->lte('feedback.assignmentDateTo', ':dateTo')) ->setParameter('dateTo', $dateTo) ; } return $qb->getQuery(); } public function getNew(int $limit = 5): array { $qb = $this->createQueryBuilder('feedback'); return $qb ->select('feedback', 'teamer') ->innerJoin('feedback.teamer', 'teamer') ->where($qb->expr()->eq('feedback.status', ':status')) ->setParameter('status', Feedback::STATUS_NEW) ->orderBy('feedback.createdAt', 'DESC') ->setMaxResults($limit) ->getQuery() ->getResult() ; } public function getCountByStatus(string $status): int { $qb = $this->createQueryBuilder('feedback'); return $qb ->select($qb->expr()->count('feedback')) ->where($qb->expr()->eq('feedback.status', ':status')) ->setParameter('status', $status) ->getQuery() ->getSingleScalarResult() ; } public function getRecentForTeamer(Teamer $teamer, int $limit = 5): array { $qb = $this->createQueryBuilder('feedback'); return $qb ->where($qb->expr()->andX( $qb->expr()->eq('feedback.teamer', ':teamer'), $qb->expr()->eq('feedback.status', ':status') )) ->setParameter('teamer', $teamer) ->setParameter('status', Feedback::STATUS_PUBLISHED) ->orderBy('feedback.createdAt', 'DESC') ->setMaxResults($limit) ->getQuery() ->getResult() ; } }