簡體   English   中英

Doctrine 2 DQL - 選擇多對多字段為空的行?

[英]Doctrine 2 DQL - Select rows where a many-to-many field is empty?

我在這個例子中有兩個類 - DeliveryMethod和Country。 他們之間有着多對多的關系。

我想要做的是選擇沒有任何國家映射到它們的所有DeliveryMethods。

我可以這樣做,即選擇至少有一個國家的所有交付方式 -

SELECT m FROM DeliveryMethod m JOIN m.countries

但我無法弄清楚如何選擇國家/地區字段為空的位置。 在純SQL中我會做以下(deliverymethod_country是鏈接表):

SELECT m.* FROM deliverymethods m
LEFT JOIN deliverymethod_country dc ON dc.deliverymethod_id = m.id
WHERE dc.deliverymethod_id IS NULL

但是,任何與此等效的DQL都不起作用,例如:

SELECT m FROM DeliveryMethod m LEFT JOIN m.countries WHERE m.countries IS NULL

這給了我這個錯誤:

[Syntax Error] line 0, col 75: Error: Expected end of string, got 'm'

使用Doctrine is empty

它專門用於檢查空關聯:

$qb->select('m')->from('DeliveryMethods', 'm')->where('m.countries is empty')

請參閱: Doctrine 2 ORM文檔:Doctrine查詢語言 (搜索“為空”)

那這個呢? 假設$qb是您的查詢構建器實例

$qb->select('m')
   ->from('DeliveryMethods','m')
   ->leftJoin('m.countries','c')
   ->having('COUNT(c.id) = 0')
   ->groupBy('m.id');

這將為您提供與國家/地區相關聯的DeliveryMethods以及關聯國家/地區的計數為0

沒有必要加入和擁有。 只需使用SIZE功能:

$qb->select('m')
   ->from('DeliveryMethods','m')
   ->where('SIZE(m.countries) = 0');

這將為您提供沒有附加國家的所有方法

無法加入NULL值,IIRC。 對於Twitter上的錯字道歉,應該說“不能”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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