0

我有 5 个实体:

  1. 联系
  2. 用户
  3. 用户从属关系
  4. 个人隶属关系

我的目标是显示一个选择字段列表,我可以在其中选择所有不在 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 实体中准备好的那些。

有什么帮助吗?谢谢你。

4

1 回答 1

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函数(实现它,如果你没有),当你创建你的表单时,你可以将它们传递给调用

于 2012-11-27T14:13:24.843 回答