0

私は5つのエンティティを持っています:

  1. 所属
  2. ユーザー
  3. UserAffiliation
  4. PersonAffiliation

私の目標は、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 に答える