我有一个带有此条目的表单类型:
->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”和“artists.name”但不起作用。我只收到PHP错误。
有谁知道怎么做或者有可能吗?
答案 0 :(得分: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
选项我已调用另一个函数创建选项列表作为数组,例如每个艺术家的组,其工作人员确保您在函数中正确定义了getter,我使用了像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;
}