Symfony 2表示+显示关系中的数据

时间:2011-10-26 05:21:51

标签: forms symfony doctrine doctrine-orm

我正在使用Symfony 2和学说。我目前有一个名为Worker的实体,在Worker实体中,与User实体存在Many To One关系。

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

还有更多像实体这样的实体,比如经理等。我想创建一个创建Job实体的表单。在表单中,我尝试创建一个选择Worker的select选项,但是worker的名称存储在用户数据库中。有没有办法在表单选项中从用户数据库中打印工作人员的姓名。

$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 个答案:

答案 0 :(得分:3)

我认为做这样的事情是完全的:

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

此外,您应该在您的Worker实体中实现一个“__toString()”方法,在该实体中您将返回您想要显示的内容(在本例中为worker名称),因此Worker实体中的__toString方法将类似于这样:

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

这是我通常实施这种关系的方式,我希望它有所帮助!

答案 1 :(得分:0)

如果您愿意,可以选择其他选项:

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

如果您定义了选项" property"你不需要实现" _toString()"在实体类