2014-03-21 2 views
1

У меня есть formtype с этой записью:Symfony2: форма сущность group_by ManyToMany

->add('work', 'entity', array(
    'class' => 'AcmeAdminBundle:Work', 
    'property' => 'name', 
    'query_builder' => function (EntityRepository $repository) { 
     return $repository->createQueryBuilder('work') 
      ->orderBy('work.name', 'ASC'); 
    }, 
    'multiple' => true, 
    'required' => false, 
    'group_by' => 'artists' 
)) 

Я пытаюсь сгруппировать работы по их имени художников. Проблема заключается в том, что художники являются ManyToMany так:

class Work 
{ 
    /** 
    * @ORM\ManyToMany(targetEntity="Artist", inversedBy="works") 
    * @ORM\JoinTable(name="works_artists") 
    */ 
    protected $artists; 

Я попытался установить group_by для «художников» и «artists.name», но ни работы. Я получаю только ошибку PHP.

Кто-нибудь знает, как это сделать или если это возможно?

ответ

5

Использование 'group_by' => 'artists.name' в построитель запросов

->add('work', 'entity', array(
    'class' => 'AcmeAdminBundle:Work', 
    'property' => 'name', 
    'query_builder' => function (EntityRepository $repository) { 
     return $repository->createQueryBuilder('work') 
     ->orderBy('work.name', 'ASC'); 
    }, 
    'multiple' => true, 
    'required' => false, 
    'group_by' => 'artists.name' 

)) 

Редактировать попробуйте использовать choices опцию в поле типа сущности я назвал другую функцию, которая создает список выбора в качестве группы массивов, как группы для каждого художника с их рабочие убедитесь, что вы правильно определить методы получения в функции я использовал манекен как getName()

->add('work', 'entity', array(
    'class' => 'AcmeAdminBundle:Work', 
    'multiple' => true, 
    'required' => false, 
    'choices' => $this->getOptGropupForEntities() 

)) 


public function getOptGropupForEntities(){ 
    $artists = $this->em->getRepository('AcmeAdminBundle:Artists')->findAll(); 
    $list = array(); 
    foreach($artists as $a){ 
     $name = $a->getName(); 
     if(count($a->getWorks())>0){ 
      foreach($a->getWorks() as $w){ 
       $list[$name][$w->getId()] = $w->getName(); 
      } 
     } 
    } 
    return $list; 
} 
+0

я получаю эту ошибку: '[Семантическая Error] строка 0, столбец 6 0 рядом с 'artist ORDER': Ошибка: Invalid PathExpression. StateFieldPathExpression или SingleValuedAssociationField ожидается. –

+0

@DiegoCastro мой плохой я не присоединился к сущности художников, см. Мой обновленный ответ и убедитесь, что у субъекта-исполнителя должна быть свойство $ id –

+0

Ну, похоже, это не решает мою проблему. На выбор, отображаемый формой, работы не сгруппированы их художниками name =/ –

Смежные вопросы