src/Repository/CategoryRepository.php line 25

Open in your IDE?
  1. <?php
  2. namespace App\Repository;
  3. use App\Entity\Category;
  4. use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
  5. use Doctrine\Common\Persistence\ManagerRegistry;
  6. use Doctrine\ORM\Mapping\ClassMetadataInfo;
  7. class CategoryRepository extends ServiceEntityRepository
  8. {
  9.     public function __construct(ManagerRegistry $registry)
  10.     {
  11.         parent::__construct($registryCategory::class);
  12.     }
  13.     public function findOneById($id){
  14.         return $this
  15.             ->findOneBy([
  16.                 'id'=> $id
  17.             ])
  18.             ;
  19.     }
  20.     public function findByUrl($name){
  21.         $cleanName urldecode(str_replace('-'' '$name));
  22.         return $this
  23.             ->findOneBy([
  24.                 'name'=>$cleanName
  25.             ])
  26.             ;
  27.     }
  28.     /*
  29.      * Return the entire menu, some issue on self referencing creating several hundred
  30.      * queries.
  31.      * Not elegant at all, and I hate myself for this. But didn't found a way for Entity recursivity yet in Symfony
  32.      */
  33.     public function getTreeMenu(){
  34.         $query $this->createQueryBuilder('f')
  35.             ->leftJoin('f.subCategory''sub')
  36.             ->addSelect('sub')
  37.             ->leftJoin('sub.subCategory''ssub')
  38.             ->addSelect('ssub')
  39.             ->leftJoin('ssub.subCategory''sssub')
  40.             ->addSelect('sssub')
  41.             ->leftJoin('sssub.subCategory''ssssub')
  42.             ->addSelect('ssssub')
  43.             ->leftJoin('sub.categories''scat')
  44.             ->addSelect('scat')
  45.             ->leftJoin('scat.categories''sccat')
  46.             ->addSelect('sccat')
  47.             ->leftJoin('sccat.categories''scccat')
  48.             ->addSelect('scccat')
  49.             ->leftJoin('scccat.categories''sccccat')
  50.             ->addSelect('sccccat')
  51.             ->leftJoin('sccccat.categories''scccccat')
  52.             ->addSelect('scccccat')
  53.             ->leftJoin('f.categories''cat')
  54.             ->addSelect('cat')
  55.             ->leftJoin('cat.categories''ccat')
  56.             ->addSelect('ccat')
  57.             ->leftJoin('ccat.categories''cccat')
  58.             ->addSelect('cccat')
  59.             ->leftJoin('cccat.categories''ccccat')
  60.             ->addSelect('ccccat')
  61.             ->leftJoin('ccccat.categories''cccccat')
  62.             ->addSelect('cccccat')
  63.             ->leftJoin('cccccat.categories''ccccccat')
  64.             ->addSelect('ccccccat')
  65.             ->leftJoin('cat.subCategory''csub')
  66.             ->addSelect('csub')
  67.             ->where('f.subCategory is NULL')
  68.             ->orderBy('f.placement''ASC')
  69.             ->getQuery()
  70.             ->getResult();
  71.         return $query;
  72.     }
  73.     public function getCategoriesBySub($sub$results false)
  74.     {
  75.         $query $this->createQueryBuilder('c')
  76.             ->orderBy('c.placement''ASC');
  77.         //->getQuery()
  78.         //->getResult()
  79.         if($results)
  80.             return $query->getQuery()->getResult();
  81.         else
  82.             return $query;
  83.     }
  84.     /*
  85.      * Return all categories that aren't in another category
  86.      */
  87.     public function getMainCategories($returnResults=false){
  88.         $query $this->createQueryBuilder('c')
  89.             ->where('c.subCategory is NULL')
  90.             ->orderBy('c.placement''ASC');
  91.         if($returnResults)
  92.             return $query->getQuery()->getResult();
  93.         else
  94.             return $query;
  95.     }
  96.     public function getEndCategories($results false)
  97.     {
  98.         $query $this->createQueryBuilder('c')
  99.             ->where('c.categories is empty')
  100.             ->orderBy('c.name''ASC')
  101.         ->getQuery()
  102.         ->getResult();
  103.         // if($results)
  104.         //     return $query->getQuery()->getResult();
  105.         // else
  106.         //     return $query;
  107.     }
  108.     /*
  109.      * Return all subcategories of a main Category
  110.      */
  111.     public function getSubCategories($category$returnResults=false){
  112.         $query $this->createQueryBuilder('c')
  113.             ->where('c.subCategory = :mainCategory');
  114.         if(empty($category))
  115.             $category current($this->getMainCategories(true));
  116.         $query->setParameter('mainCategory'$category);
  117.         $query->orWhere('c.subCategory IN (:ids)')
  118.             ->setParameter('ids'
  119.             $this->createQueryBuilder('s')
  120.             ->where ('s.subCategory = :mainCategory')
  121.             ->setParameter('mainCategory'$category)
  122.             ->getQuery()->getResult()
  123.         );
  124.         $query->andWhere('c.placement > 0');
  125.         $query->orderBy('c.subCategory''ASC');
  126.         $query->orderBy('c.placement''ASC');
  127.         if($returnResults)
  128.             return $query->getQuery()->getResult();
  129.         else
  130.             return $query;
  131.     }
  132.     /*
  133.      * Return a complete array of the Categories
  134.      */
  135.     public function getAllCategoriesAsArray($Id 0$catComplete = array()){
  136.         //We are building a array of the Category structure to show
  137.         $roots $this->getCategoriesBySub($Idtrue);
  138.         foreach($roots as $key => $root){
  139.             $catComplete[$key] = $this->extractValues($root);
  140.             $catComplete[$key]['sub'] = $this->getAllCategoriesAsArray($root->getId());
  141.             //$subs = $this->getCategoriesBySub($root->getId(), true);
  142.             //$catComplete[$key]['sub'][] = $this->extractValues($subs);
  143.         }
  144.         return $catComplete;
  145.     }
  146.     /*
  147.      * Small handy function to extract data from the objects
  148.      */
  149.     private function extractValues($obj){
  150.         return array(
  151.             'id' => $obj->getId(),
  152.             'name' => $obj->getName(),
  153.             'link' => $obj->getLink(),
  154.             'subcat' => $obj->getSub()
  155.         );
  156.     }
  157.     /*
  158.      * Return all subcategories of a main Category
  159.      */
  160.     public function getMyCategoryforplacemnt($category){
  161.         $query $this->createQueryBuilder('c')
  162.         ->select('c.id AS cateId,c.placement AS firstnameplacement, c.name As firstname')
  163.         ->where('c.subCategory = :mainCategory')
  164.         ->setParameter('mainCategory',$category)
  165.         ->andWhere('c.placement > 0')
  166.         ->orderBy('c.subCategory''ASC')
  167.         ->orderBy('c.placement''ASC');
  168.         $result $query->getQuery()->getResult();
  169.         return $result;
  170.     }
  171. }