【发布时间】:2017-11-09 15:26:01
【问题描述】:
我有两个具有多对多关系的实体(汽车和经销商)。 我有一个有效的 SQL 请求:
Select c.id, c.nom FROM car as c WHERE c.id NOT IN
(Select car_id FROM dealer_car where dealer_id = 16);
但是使用 querybuilder 我不能这样做,因为dealer_car 是多对多关系的表。
实际上我有这个查询生成器,它返回完全相反的结果
'query_builder' => function(EntityRepository $er) use ($options){
return $er->createQueryBuilder('c')
->innerJoin('c.dealer','d')
->andWhere('c.id NOT IN (Select d.id FROM Bundle:Dealer de where de.id = :id)')
->setParameter('id',$options['data']->getId());
}
编辑
我的数据库中有以下数据
Car
1;BMW
2;Tesla
3;Mercedes
4;Toyota
dealer_car
16;2
16;3
dealer
1;Johnny
2;David
16;Nelson
而下面Query的结果为空
select c.id, c.name,d.name from car c join dealer_car dc on c.car_id=c.id join dealer d on dc.d_id=d.id where d.id!=16
【问题讨论】:
-
为空,因为表dealer_car 上的所有关系都与dealer 16 相关。尝试与其他dealer 添加另一行并发布您的结果。