|
- <?php
-
- namespace Lc\SovBundle\Repository\Ticket;
-
- use Knp\Component\Pager\PaginatorInterface;
- use Lc\SovBundle\Model\User\UserInterface;
- use Lc\SovBundle\Repository\AbstractRepositoryQuery;
-
- class TicketRepositoryQuery extends AbstractRepositoryQuery implements TicketRepositoryQueryInterface
- {
-
- protected $isJoinUser = false;
-
- public function __construct(TicketRepository $repository, PaginatorInterface $paginator)
- {
- parent::__construct($repository, 'ticket', $paginator);
- }
-
- public function filterByUser(UserInterface $user): self
- {
- return $this
- ->andWhere('.user = :user')
- ->setParameter('user', $user);
- }
-
- public function joinUser(): self
- {
- if (!$this->isJoinUser) {
- $this->isJoinUser = true;
-
- return $this
- ->leftJoin('.user', 'user');
- }
- return $this;
- }
-
- public function filterByStatus($statusArray): self
- {
- return $this
- ->andWhere('.status IN (:status)')
- ->setParameter('status', $statusArray);
- }
-
- public function filterByFirstname(string $firstname)
- {
- $this->joinUser();
-
- return $this
- ->andWhere('.visitorFirstname LIKE :firstname OR user.firstname LIKE :firstname')
- ->setParameter('firstname', $firstname);
- }
-
- public function filterByLastname(string $lastname)
- {
- $this->joinUser();
-
- return $this
- ->andWhere('.visitorLastname LIKE :lastname OR user.lastname LIKE :lastname')
- ->setParameter('lastname', $lastname);
- }
-
- public function filterByEmail(string $email)
- {
- $this->joinUser();
-
- return $this
- ->andWhere('.visitorEmail LIKE :email OR user.email LIKE :email')
- ->setParameter('email', $email);
- }
-
- public function selectCount(): self
- {
- return $this
- ->select('count(ticket.id) as count');
- }
- }
|