Symfony2:表单实体group_by ManyToMany

时间:2014-03-21 20:32:01

标签: php symfony doctrine-orm

我有一个带有此条目的表单类型:

->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错误。

有谁知道怎么做或者有可能吗?

1 个答案:

答案 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;
}