src/Repository/MenuTreeRepository.php line 31

Open in your IDE?
  1. <?php
  2. namespace App\Repository;
  3. use App\Entity\MenuTree;
  4. use Doctrine\ORM\NonUniqueResultException;
  5. use Gedmo\Tree\Entity\Repository\NestedTreeRepository;
  6. /**
  7. * Class MenuTreeRepository
  8. * @package App\Repository
  9. *
  10. * @method MenuTree findOneBy(array $params)
  11. * @method MenuTree findOneByRoute(string $route)
  12. */
  13. class MenuTreeRepository extends NestedTreeRepository
  14. {
  15. /**
  16. * @param $route
  17. * @return mixed
  18. * @throws NonUniqueResultException
  19. */
  20. public function findOneLeafByRoute($route)
  21. {
  22. $queryBuilder = $this->createQueryBuilder('m');
  23. $queryBuilder->where('m.route = :rte')
  24. ->setParameter('rte', $route)
  25. ->andWhere('m.lft+1 = m.rgt')
  26. ->setMaxResults(1);
  27. return $queryBuilder->getQuery()->getOneOrNullResult();
  28. }
  29. /**
  30. * @param int|null $id
  31. * @return array
  32. */
  33. public function getTreeData(int $id = null)
  34. {
  35. $queryBuilder = $this->createQueryBuilder('m')
  36. ->select('m.id AS id_level, m.libelle AS label_level')
  37. ->orderBy('m.lft');
  38. if ($id) {
  39. $queryBuilder->where('m.parent = :id')
  40. ->setParameter('id', $id);
  41. } else {
  42. $queryBuilder->where('m.parent = 1');
  43. }
  44. $queryBuilder->addSelect('CASE WHEN m.lft + 1 = m.rgt THEN 0 ELSE 1 END AS folder');
  45. return $queryBuilder
  46. ->andWhere('m.root = 1')
  47. ->getQuery()
  48. ->useQueryCache(true)
  49. ->enableResultCache(60)
  50. ->getResult();
  51. }
  52. }