我有5个实体:
我的目标是显示一个选择字段列表,我可以选择所有不属于PersonAffiliations的UserAffiliations。
我的想法是在UserAffiliationRepository中创建一个公共函数,该函数将仅返回特定用户的那些未为特定人预设的从属关系。
为此,我正在使用:
class UserAffiliationRepository extends EntityRepository
{
public function getUnselectedAffiliations( $user_id = null, $person_id = null )
{
$commQB = $this->createQueryBuilder( 'ua' )
->select('ua');
$commQB->where("ua.user_id = {$user_id}");
$commQB->andWhere( "ua.affiliation_id not in ( select pa.affiliation_id FROM SciForumVersion2Bundle:PersonAffiliation pa where pa.person_id = 3077 )" );
return $commQB->getQuery()->getResult();
}
}
这很好用。
现在,我想在FormBuilder中使用此结果。为此,在我的控制器中,我正在使用:
$affiliations = $em->getRepository('SciForumVersion2Bundle:UserAffiliation')->getUnselectedAffiliations($user->getId(), $author->getId())
$enquiry = new PersonAffiliation();
$formType = new SubmissionAffiliationAddFormType($user, $affiliations);
$form = $this->createForm($formType, $enquiry);
然后在Form类中,我正在使用:
$builder->add('affiliation', 'entity', array(
'class' => 'SciForumVersion2Bundle:UserAffiliation',
'multiple' => true));
但是在这里,我获得了特定用户的所有从属关系,而不仅仅是那些尚未在PersonAffiliations实体中使用的关联。
有任何帮助吗?谢谢。
答案 0 :(得分:2)
您必须按以下方式将getUnselectedAffiliations
函数直接迁移到entity_type
$builder->add('affiliation', 'entity', array(
'class' => 'SciForumVersion2Bundle:UserAffiliation',
'multiple' => true,
'query_builder' = function(EntityRepository $repo) use ($yourParameters){
return $repo->createQueryBuilder(....);}));
如果你想传递$yourParameters
,你必须在__construct
函数中执行它(如果你没有它,就实现它),当你创建表单时,你可以传递它们电话