<?php
namespace App\Repository;
use App\Entity\MenuTree;
use Doctrine\ORM\NonUniqueResultException;
use Gedmo\Tree\Entity\Repository\NestedTreeRepository;
/**
* Class MenuTreeRepository
* @package App\Repository
*
* @method MenuTree findOneBy(array $params)
* @method MenuTree findOneByRoute(string $route)
*/
class MenuTreeRepository extends NestedTreeRepository
{
/**
* @param $route
* @return mixed
* @throws NonUniqueResultException
*/
public function findOneLeafByRoute($route)
{
$queryBuilder = $this->createQueryBuilder('m');
$queryBuilder->where('m.route = :rte')
->setParameter('rte', $route)
->andWhere('m.lft+1 = m.rgt')
->setMaxResults(1);
return $queryBuilder->getQuery()->getOneOrNullResult();
}
/**
* @param int|null $id
* @return array
*/
public function getTreeData(int $id = null)
{
$queryBuilder = $this->createQueryBuilder('m')
->select('m.id AS id_level, m.libelle AS label_level')
->orderBy('m.lft');
if ($id) {
$queryBuilder->where('m.parent = :id')
->setParameter('id', $id);
} else {
$queryBuilder->where('m.parent = 1');
}
$queryBuilder->addSelect('CASE WHEN m.lft + 1 = m.rgt THEN 0 ELSE 1 END AS folder');
return $queryBuilder
->andWhere('m.root = 1')
->getQuery()
->useQueryCache(true)
->enableResultCache(60)
->getResult();
}
}