如何获得多对多关系中的实体,这些实体没有与DQL和Doctrine对应的链接实体?
我建立了标准的多对多关系。实体A可以有许多实体B,反之亦然 我试图获取所有实体a的列表,这些实体a没有任何对应的实体B。在SQL中,我会运行如下查询:如何获得多对多关系中的实体,这些实体没有与DQL和Doctrine对应的链接实体?,doctrine,many-to-many,dql,Doctrine,Many To Many,Dql,我建立了标准的多对多关系。实体A可以有许多实体B,反之亦然 我试图获取所有实体a的列表,这些实体a没有任何对应的实体B。在SQL中,我会运行如下查询: SELECT a.* FROM entity_a a LEFT JOIN a_b r ON r.AID = a.id WHERE r.BID IS NULL 在这个查询中,a_b是链接表 我正在尝试编写一个DQL语句(或使用其他方法)以获得相同的结果,但以下操作不起作用: SELECT s FROM VendorMyBundle:EntityA
SELECT a.* FROM entity_a a LEFT JOIN a_b r ON r.AID = a.id WHERE r.BID IS NULL
在这个查询中,a_b是链接表
我正在尝试编写一个DQL语句(或使用其他方法)以获得相同的结果,但以下操作不起作用:
SELECT s FROM VendorMyBundle:EntityA s LEFT JOIN VendorMyOtherBundle:EntityB u WHERE u IS NULL
如何才能实现我的目标?首先,我必须强调,通常您应该加入实体的属性(即s),例如,而不是:
SELECT s FROM VendorMyBundle:EntityA s
LEFT JOIN VendorMyOtherBundle:EntityB u WHERE u IS NULL
您应该有如下内容:
SELECT s FROM VendorMyBundle:EntityA s
LEFT JOIN s.mylistofb u WHERE u IS NULL
我假设在实体A中,您将您的关系定义为:
class A{
// ...
/**
* @ManyToMany(targetEntity="Vendor\MyBundle\Entity\EntityB")
* @JoinTable(name="as_bs",
* joinColumns={@JoinColumn(name="a_id", referencedColumnName="id")},
* inverseJoinColumns={@JoinColumn(name="b_id", referencedColumnName="id", unique=true)}
* )
**/
private $mylistofb;
如上所述,如果查询尚未运行,请尝试以下操作:
SELECT s FROM VendorMyBundle:EntityA s
WHERE SIZE(s.mylistofb) < 1
从VendorMyBundle中选择s:EntityA s
其中尺寸(s.mylistofb)<1
它比前一个更简单,并且也来自(例如,请参阅“电话号码示例”)。谢谢!这就解决了问题。我仍然非常习惯SQL,而不是DQL,所以有些语法上的差异让我感到困惑。@Uthr我也一样。