Форма Symfony 2 + показывает данные из отношения - PullRequest
1 голос
/ 26 октября 2011

Я использую Symfony 2 с доктриной.В настоящее время у меня есть объект под названием Worker, а в объекте Worker есть отношение «многие к одному» с объектом «Пользователь».

/**
 * @ORM\ManyToOne(targetEntity="User")
 * @ORM\JoinColumn(name="user_id", referencedColumnName="id")
 */
private $user;

Есть и другие объекты, такие как Worker, такие как Manager и тому подобное.Я хочу создать форму, которая создает объект Job.В форме я пытаюсь создать опцию выбора, которая выбирает Работника, но имя работника сохраняется в базе данных пользователей.Есть ли способ напечатать имя работника из базы данных пользователей в опциях формы.

$builder->add('workers','entity',array('label' => 'Workers:',
                                'property'=>'t.user.firstName',
                                'empty_value' => 'Choose a Worker',
                                'class' => 'Company\CompanyBundle\Entity\Worker',
                                                    'query_builder' => function (\Company\CompanyBundle\Repository\WorkerRepository $repository)
                                                            {
                                                                     return $repository->createQueryBuilder('t') 
                                                                                ->add('orderBy', 't.user.firstName ASC');
                                                            }
                ))

    ;

Есть идеи?

Ответы [ 2 ]

3 голосов
/ 26 октября 2011

Я думаю, что было бы достаточно сделать что-то вроде этого:

$builder->add('workers', 'entity', array(
            'class' => 'Company\CompanyBundle\Entity\Worker',
        ) );

Кроме того, вы должны реализовать метод "__toString ()" в вашей рабочей сущности, где вы бы возвращали все, что хотите показать(в данном случае это имя работника), поэтому ваш метод __toString в сущности Worker будет выглядеть примерно так:

function __toString() {
    return $this->getName();
}

Обычно я реализую такие отношения, надеюсь, это поможет!

0 голосов
/ 07 апреля 2015

Если вы предпочитаете, вы можете сделать эту другую опцию:

$builder->add('workers', 'entity', array(
    'class' => 'Company\CompanyBundle\Entity\Worker',
    'property' => 'property_name'
));

Если вы определили опцию «свойство», вам не нужно реализовывать «_toString ()» в классе сущности

...