簡體   English   中英

Symfony 3:選擇多對多的關系

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM