使用Sonata / Symfony2中的createQueryBuilder()方法选择多个字段

时间:2015-08-03 13:40:21

标签: symfony sonata

我有一个表格,其中包含3个字段中的人名:“lastname”,“firstname”,“middlename”。 我需要通过createQueryBuilder()方法或其他方式连接所有3个字段。 我的代码如下所示:

$formMapper->add('collaborator', 'entity', array
            (
                'label' => 'acme.admin.person',
                'empty_value' => '',
                'class' => 'AcmeCoreBundle:Person',
                'query_builder' => function ($repository) {
                    return $repository
                        ->createQueryBuilder('p')
                        ->where('p.status = 1')
                        ->orderBy('p.lastname', 'ASC');
                },
                'property' => 'lastname'
            )
        );

当然,现在它只返回“姓氏”。 如何修改它以获得我需要的结果?

1 个答案:

答案 0 :(得分:1)

一种方法是在Person实体中定义一个未映射的属性,让我们说$titleConcat现在为该属性创建一个getter并连接所有要显示的3个属性

protected $titleConcat;

public function getTitleConcat() {
    return $this->firstname.' '.$this->middlename. ' ' . $this->lastname;
}

现在在$formMapper对象中定义'property' => 'titleConcat'

$formMapper->add('collaborator', 'entity', array
            (
                'label' => 'acme.admin.person',
                'empty_value' => '',
                'class' => 'AcmeCoreBundle:Person',
                'query_builder' => function ($repository) {
                    return $repository
                        ->createQueryBuilder('p')
                        ->where('p.status = 1')
                        ->orderBy('p.lastname', 'ASC');
                },
                'property' => 'titleConcat'
            )
        );