私は5つのエンティティを持っています:
- 所属
- 人
- ユーザー
- UserAffiliation
- 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エンティティにまだ含まれていないものだけでなく、特定のユーザーのすべてのアフィリエーションを取得しています。
何か助けはありますか?ありがとうございました。