[英]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.