*/ class TaskRepository extends ServiceEntityRepository { protected PaginatorInterface $paginator; protected Request $request; public function __construct(ManagerRegistry $registry, PaginatorInterface $paginator, RequestStack $requestStack) { parent::__construct($registry, Task::class); $this->paginator = $paginator; $this->request = $requestStack->getCurrentRequest(); } // /** // * @return Task[] Returns an array of Task objects // */ // public function findByExampleField($value): array // { // return $this->createQueryBuilder('t') // ->andWhere('t.exampleField = :val') // ->setParameter('val', $value) // ->orderBy('t.id', 'ASC') // ->setMaxResults(10) // ->getQuery() // ->getResult() // ; // } // public function findOneBySomeField($value): ?Task // { // return $this->createQueryBuilder('t') // ->andWhere('t.exampleField = :val') // ->setParameter('val', $value) // ->getQuery() // ->getOneOrNullResult() // ; // } public function findByProjectPaginated(Project $project) { $query = $this->createQueryBuilder('t') ->andWhere('t.project = :project') ->setParameter('project', $project) ->getQuery(); return $this->paginator->paginate( $query, $this->request->query->getInt('page', 1), 100 ); } public function findNextOne(Task $task, $order = 'ASC') { return $this->createQueryBuilder('t') ->andWhere('t.project = :project') ->andWhere('t.id > :id') ->setParameter('project', $task->getProject()) ->setParameter('id', $task->getId()) ->orderBy('t.id', $order) ->setMaxResults(1) ->getQuery() ->getOneOrNullResult() ; } public function findRandomByProject(Project $project, $status = null) { $qb = $this->createQueryBuilder('t') ->andWhere('t.project = :project') ->setParameter('project', $project); if (!is_null($status)) { $qb->andWhere('t.status = :status') ->setParameter('status', $status); } $tasks = $qb->getQuery() ->getResult() ; shuffle($tasks); return reset($tasks); } }