我正在使用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');
}
))
;
有什么想法吗?
答案 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()"在实体类
中