我有3个实体:公司,部门和用户 用户与公司有一对多的关系。 部门与公司和用户分开了多对一的关系
目标是让每个部门配置不同的部门,并且用户能够从属于他们公司的部门中选择(在他们的个人资料中)。
我正在尝试使用entity字段类型构建来完成此操作。我的问题是,当Symfony呈现该字段时,允许用户选择任何部门,而不仅仅是属于该用户公司的部门。
我试过了using a custom query,但是我收到一个错误,即$ company不存在(即使我在我的函数中有它)。我认为这是因为自定义查询在一个闭包中,它有自己的范围。
答案 0 :(得分:2)
您使用自定义查询的建议是完全正确的。要在自定义查询范围内使用对象,必须使用 use 语句。 E.g:
$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
));
}
));