How to use Repository custom functions in a FormType

感情迁移 提交于 2020-01-04 03:18:19

问题


The problem I'm facing is I have to create a selectbox in a form that holds all the parent entities (Category Entity). Now i managed to do this with:

$builder->add('parent', 'entity', array(
                'class' => 'KprCentarZdravljaBundle:Category',
                'query_builder' => function($repository) use ($param, $catID) { 
                                        return $repository->createQueryBuilder('p')
                                                ->where('p.id != :id AND p.parent = :parent')
                                                ->setParameters(array('id' => $param, 'parent' => $catID));},
                'property' => 'name',
                'required' => false,
                'attr'   =>  array('data-placeholder' => '--Izaberite Opciju--'),
                ));

As u can see i pass 2 arguments first is the current category.id(a category cant be its own parent) and a second which is a parent id, because i want all the children from that parent. This works nice but it doesn't give me the parents children's children. I created a CategoryRepository with a recursive function that returns all the children:

<?php

namespace Kpr\CentarZdravljaBundle\Entity;

use Doctrine\ORM\EntityRepository;
use Doctrine\Common\Collections\ArrayCollection;
use Kpr\CentarZdravljaBundle\Entity\Category;

class CategoryRepository extends EntityRepository
{
public function findByParenting($parent)
{
    $qb = $this->getEntityManager()->createQueryBuilder();

    $qb->add('select', 'cat')
       ->add('from', 'KprCentarZdravljaBundle:Category cat')
       ->add('where', 'cat.parent = :parent')
       ->setParameter('parent', $parent);
    // $qb instanceof QueryBuilder
    $query = $qb->getQuery();
    $results = $query->getResult();
    foreach($results as $result){
        if($result->getParent()){
            $newResult = $this->findByParenting($result->getId());
            $results = array_merge($results, $newResult);
        }
    }
    return $results;

}
}

How can I use the findByParenting($parent) function in a entity field?


回答1:


I posted the answer: Symfony2 choice field not working. Thanks redbirdo.




回答2:


You are having this error because you have to return the QueryBuilder object on your findByParenting($parent) function

public function findByAllocation($alloc) 
    {
      return $qb = $this->createQueryBuilder('r')
               ->select('r')
               ->where('r.showRangeStart < :alloc', 'r.showRangeStop >= :alloc')
               ->setParameter('alloc', $alloc)
               ;

    }


来源:https://stackoverflow.com/questions/16441771/how-to-use-repository-custom-functions-in-a-formtype

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!