1

我建立了标准的多对多关系。实体 A 可以拥有多个实体 B,反之亦然

我正在尝试获取没有任何相应实体 B 的所有实体 A 的列表。在 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

我怎样才能实现我想要做的事情?

4

1 回答 1

3

首先,我必须强调,通常你应该加入实体的属性(即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

它比前面的更简单,也来自官方文档(即参见“电话号码示例”)。

于 2013-01-20T14:54:50.543 回答