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



我有一个表,其中包含三个字段中的人名:"lastname", "firstname", " midlename "。我需要通过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'
            )
        );

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

一种方法是在你的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'
            )
        );

相关内容

  • 没有找到相关文章

最新更新