如何获得多对多关系中的实体,这些实体没有与DQL和Doctrine对应的链接实体?

如何获得多对多关系中的实体,这些实体没有与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

我建立了标准的多对多关系。实体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 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我也一样。