繁体   English   中英

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

[英]Symfony2 and Doctrine2 : Use a Repository class result in Type class

我有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实体中使用的关联。

有帮助吗? 谢谢。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM