2013-05-14 120 views
0

我有一個ProductCategory實體。Symfony2的形式選擇欄

Category實體是鄰接表/物化路徑模型。

Product有關係Category具有追溯至Product

在我ProductType類我想與所有類別中selectmenu於母公司名稱分組特定水平。

$builder->add('category', 'entity', array(
      'label' => 'Category', 
      'class' => 'Test\AdminBundle\Entity\Category', 
      'property' => 'name', 
      'group_by' => 'parentName', 
      'query_builder' => function(\Doctrine\ORM\EntityRepository $er) { 

       $qb = $er->createQueryBuilder('c'); 

       return $qb->where($qb->expr()->like('c.path', ':path')) 
         ->orderBy('c.path', 'ASC') 
         ->setParameter('path', '%/%/%'); 
      }, 
    )); 

Category有一個方法:

public function getParentName() 
{ 
    if (null === $this->getParent()) { 
    return null; 
    } 

    return $this->getParent()->getName(); 
} 

它可以作爲預期,但一查詢是每一個家長(很多)執行。如果我與父母聯合,父母也可以在我不想要的選擇菜單中選擇。

如何限制查詢?

或過濾器一個連接的結果?

+0

添加可以添加' - > leftJoin( 'c.parent', 'P')'如果你有一個父母的類別。這並不影響結果的數量 – 2013-05-14 17:16:27

+0

我明白你的意思,但不幸的是,它不會改變任何事情。 – user1070125 2013-05-14 18:32:18

回答

0

我沒有fetchjoining ...添加選擇到QueryBuilder的使工作:

$qb = $er->createQueryBuilder('c'); 

return $qb->select('c, p') 
->leftJoin('c.parent', 'p') 
->where($qb->expr()->like('c.path', ':path')) 
->orderBy('c.path', 'ASC') 
->setParameter('path', '%/%/%');