如何筛选symfony2形式的onetoMany关系选择框


How can i filter my onetoMany relationship select boxes in symfony2 form

我与有一对多关联

Product将有许多vouchers但一张代金券只能链接到一个产品。

现在,当我有了产品表单,我就有了选择框,我可以在其中选择多个凭证。但问题是

如果凭证以前链接到另一个产品,则会更新它。

那么,有没有任何方法/查询可以让我在选择框中看到

  1. 所有当前未链接到任何产品的vouers(可以这样做)
  2. 现在,但我也想展示之前链接到当前编辑产品的vochuher

这是我的代码

 ->add('vouchers', 'entity', array(
                'class' => 'AcmeMyBundle:Voucher',
                'query_builder' => function(EntityRepository $er) {
                    return $er->createQueryBuilder('u')
                    ->where('u.product_id = :id')
                                ->setParameter('id', 'NULL')
                    ->orderBy('u.name', 'DESC');
                        },
                'expanded'=> false,
                'multiple' => true
                    ))

您可以编辑查询。我们不知道您的关联是什么样子,但假设您使用的是vouchers

//...
->where('u.product_id = :id')
->leftJoin('u.vouchers','v')
->having('COUNT(v.id) = 0')
->groupBy('u.product_id');