src/Repository/Cvs/JobsFiltersRepository.php line 53

Open in your IDE?
  1. <?php
  2. namespace App\Repository\Cvs;
  3. use App\Entity\Cvs\JobsFilters;
  4. use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
  5. use Doctrine\Persistence\ManagerRegistry;
  6. /**
  7. * @extends ServiceEntityRepository<JobsFilters>
  8. *
  9. * @method JobsFilters|null find($id, $lockMode = null, $lockVersion = null)
  10. * @method JobsFilters|null findOneBy(array $criteria, array $orderBy = null)
  11. * @method JobsFilters[] findAll()
  12. * @method JobsFilters[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
  13. */
  14. class JobsFiltersRepository extends ServiceEntityRepository
  15. {
  16. public function __construct(ManagerRegistry $registry)
  17. {
  18. parent::__construct($registry, JobsFilters::class);
  19. }
  20. /**
  21. * Tous les filtres actifs pour une locale, triés par position.
  22. *
  23. * @return JobsFilters[]
  24. */
  25. public function findActiveByLocale(string $locale, ?int $limit = null): array
  26. {
  27. $qb = $this->createQueryBuilder('f')
  28. ->where('f.locale = :locale')
  29. ->andWhere('f.online = :online')
  30. ->setParameter('locale', $locale)
  31. ->setParameter('online', true)
  32. ->orderBy('f.position', 'ASC')
  33. ->addOrderBy('f.id', 'ASC');
  34. if ($limit !== null) {
  35. $qb->setMaxResults($limit);
  36. }
  37. return $qb->getQuery()->getResult();
  38. }
  39. /**
  40. * Filtres actifs filtrés par type (city, category, job, custom...) pour une locale.
  41. *
  42. * @return JobsFilters[]
  43. */
  44. public function findActiveByLocaleAndType(string $locale, string $type, ?int $limit = null): array
  45. {
  46. $qb = $this->createQueryBuilder('f')
  47. ->where('f.locale = :locale')
  48. ->andWhere('f.online = :online')
  49. ->andWhere('f.type = :type')
  50. ->setParameter('locale', $locale)
  51. ->setParameter('online', true)
  52. ->setParameter('type', $type)
  53. ->orderBy('f.position', 'ASC')
  54. ->addOrderBy('f.id', 'ASC');
  55. if ($limit !== null) {
  56. $qb->setMaxResults($limit);
  57. }
  58. return $qb->getQuery()->getResult();
  59. }
  60. /**
  61. * Trouve un filtre par son slug et sa locale (pour la page landing /{locale}/jobs/{slug}).
  62. */
  63. public function findOneBySlugAndLocale(string $slug, string $locale): ?JobsFilters
  64. {
  65. return $this->createQueryBuilder('f')
  66. ->where('f.slug = :slug')
  67. ->andWhere('f.locale = :locale')
  68. ->andWhere('f.online = :online')
  69. ->setParameter('slug', $slug)
  70. ->setParameter('locale', $locale)
  71. ->setParameter('online', true)
  72. ->getQuery()
  73. ->getOneOrNullResult();
  74. }
  75. }