symfony – doctrine queryBuilder其中IN集合

在我的实体上,我有一个用户的数组集合

/**
 * @ORM\ManyToMany(targetEntity="\UserBundle\Entity\User", mappedBy="acr_groups")
 */
protected $users;

public function __construct() {
    $this->users = new \Doctrine\Common\Collections\ArrayCollection();
}

在我的FormType中,我想过滤掉当前用户所属的组:

    $builder
    ->add('acr_group', EntityType::class, array(
        'label' => 'ATS',
        'class' => 'HazardlogBundle:ACRGroup',
        'query_builder' => function (EntityRepository $er) use ($user) { // 3. use the user variable in the querybilder
                $qb = $er->createQueryBuilder('g');
                $qb->where(':user IN (g.users)');
                $qb->setParameters( array('user' => $user) );
                $qb->orderBy('g.name', 'ASC');
                return $qb;
        },
        'choice_label' => 'name'
    ))

我的问题显然是在这一行:

$qb->where(':user IN (g.users)');

如何使用我的用户集合作为IN()的参数?

最佳答案 试试下面的代码

$user = array(12,211,612,84,63,23); // Assuming User Ids whose groups you want to retrive

$builder
->add('acr_group', EntityType::class, array(
    'label' => 'ATS',
    'class' => 'HazardlogBundle:ACRGroup',
    'query_builder' => function (EntityRepository $er) use ($user) { 
            $qb = $er->createQueryBuilder('g');
            $qb->innerJoin('g.users', 'u'); // Inner Join with users
            $qb->where('u.id IN (:user)');
            $qb->setParameters( array('user' => $user) );
            $qb->orderBy('g.name', 'ASC');
            return $qb;
    },
    'choice_label' => 'name'
))

我已经在symfony 2.3中使用doctrine2进行了尝试.您可以使用select函数和createQueryBuilder()来获取特定列.

点赞