[英]Symfony 3 : Select with relation many to many
我有两个与许多人(汽车和经销商)有关系的实体。 我有一个有效的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
如何更改查询?
SELECT c.id, c.nom FROM car AS c LEFT OUTER JOIN dealer_car AS dc ON c.id = dc.car_id AND dc.dealer_id = 16 WHERE dc.dealer_id IS NULL;
我想你正试图让与id = 16的经销商无关的汽车。 这应该适合你。
$qb->select('c.id,c.nom')
->join('c.dealer','d')
->where($qb->expr()->neq('d.id',':delearId'))
->setParameter('dealerId',$dealerId)
->getQuery()
->getResult();
子查询返回与经销商id = 16相关联的汽车。 为了简化查询,您只需要进行连接并从经销商处排除id = 16。 更像是一个直接的问题
您正在请求类似的东西:给我经销商16正在使用的汽车不同的汽车
我正在请求类似(直接)的东西:给我经销商16没有使用的汽车。
希望能帮助到你
编辑
我做了这些表 :这将是你的查询:
select c.id, c.carname FROM car c WHERE c.id NOT IN
(Select car_id FROM dealer_has_car where dealer_id = 16);
结果:
1;"car1"
2;"car2"
3;"car4"
4;"car3"
7;"car7"
8;"car8"
9;"car9"
10;"car10"
这将是我的查询
select c.id, c.carname,d.name from car c join dealer_has_car dhc on dhc.car_id=c.id join dealer d on dhc.dealer_id=d.id where d.id!=16
结果
1;"car1";"dealer1"
2;"car2";"dealer1"
3;"car4";"dealer2"
4;"car3";"dealer2"
7;"car7";"dealer3"
8;"car8";"dealer4"
9;"car9";"dealer4"
10;"car10";"dealer5"
你可以看到查询工作正常,我的SQL的DQl是我上面发布的。 结果是一样的!!
您可以像我一样提供有关结果的更多信息吗?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.