Выберите несколько полей, используя метод createQueryBuilder() в Sonata/Symfony2.

У меня есть таблица, содержащая имена людей в 3 полях: "фамилия", "имя", "отчество". Мне нужно, чтобы все 3 поля были объединены методом createQueryBuilder() или как-то еще. Мой код выглядит так:

$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 Siarhei    schedule 03.08.2015    source источник
comment
вы можете пометить ответ как принятый, см. здесь meta.stackexchange.com/questions/5234/   -  person M Khalid Junaid    schedule 05.08.2015


Ответы (1)


Один из способов - определить несопоставленное свойство в вашем объекте Person, скажем, $titleConcat теперь создайте геттер для свойства и объедините все 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'
            )
        );
person M Khalid Junaid    schedule 03.08.2015