[英]Access field in a many-to-many intermediate table with DQL in Doctrine
[英]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'
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.