3

私が直面している問題は、すべての親エンティティ (カテゴリ エンティティ) を保持するフォームに選択ボックスを作成する必要があることです。今、私はこれを行うことができました:

$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--'),
                ));

ご覧のとおり、最初に2つの引数を渡します。これは、現在のcategory.id(カテゴリはそれ自体の親になることはできません)であり、2つ目は親IDです。その親からすべての子が必要だからです。これはうまく機能しますが、親の子供の子供は得られません。すべての子を返す再帰関数を使用して CategoryRepository を作成しました。

<?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;

}
}

エンティティ フィールドで findByParenting($parent) 関数を使用するにはどうすればよいですか?

4

2 に答える 2