![](/img/trans.png)
[英]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.