Symfony2和Doctrine2:在Type类中使用Repository类结果

时间:2012-11-27 13:20:46

标签: php symfony doctrine-orm dql

我有5个实体:

  1. 所属
  2. 用户
  3. UserAffiliation
  4. PersonAffiliation
  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实体中使用的关联。

    有任何帮助吗?谢谢。

1 个答案:

答案 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函数中执行它(如果你没有它,就实现它),当你创建表单时,你可以传递它们电话