我有 3 个实体:公司、部门和用户用户与公司有一对多的关系。部门与公司和用户有分离的多对一关系
目标是让每个部门配置不同的部门,并且用户能够(在他们的个人资料中)从属于他们公司的部门中进行选择。
我正在尝试使用内置实体字段类型来完成此操作。我的问题是,当 Symfony 呈现该字段时,用户可以选择任何部门,而不仅仅是属于该用户公司的部门。
我尝试使用自定义查询,但我收到 $company 不存在的错误(即使我的函数中有它)。我认为这是因为自定义查询在一个闭包中,它有自己的范围。
您使用自定义查询的建议是完全正确的。要在自定义查询范围内使用对象,您必须使用use语句。例如:
$company = $user->getCompany();
$builder->add('department', 'entity', array(
'class' => 'YourSpecialBundle:Department',
'property' => 'name',
'query_builder' => function(EntityRepository $er) use($company) {
return $er->createQueryBuilder('r')
->where('r.company = :company')
->setParameter("company", $company);
}
));
如果需要定义多个过滤器:
$company = $user->getCompany();
$builder->add('department', 'entity', array(
'class' => 'YourSpecialBundle:Department',
'property' => 'name',
'query_builder' => function(EntityRepository $er) use($company) {
return $er->createQueryBuilder('r')
->where('r.company = :company AND r.active = :active')
->setParameter(array(
"company" => $company,
"active" => true
));
}
));