在一个cakephp 3应用程序中,我如何构建一个查询,从一个表中找到所有不包含它的关联表


In a cakephp 3 app, how do I build a query that finds all from a Table that does NOT contain it's associated table?

是否有一种简单的方法来获得查询生成器的contain方法的逆?

我使用belongsToMany关联和一个连接表来关联两个模型。

EmailsTable $this->belongsToMany('Issues');

IssuesTable $this->belongsToMany('Emails');

所以我不能这样做:

$unparsed_emails = $this->Emails->find('all')->where(['issue_id is null']);

似乎下面的反向将提供没有相关问题的电子邮件:

$unparsed_emails = $this->Emails->find->contain(['Issues']);  //need inverse of this

我想我一定是从cakephp 3 ORM/Querybuilder文档中缺少一些东西,但我找不到它。

我还没有那么多进入查询生成器,所以我不确定是否有更简单的方法,但左连接应该做到这一点。

$this->Emails
    ->find('all')
    ->leftJoin('emails_issues', 'emails_issues.email_id = Emails.id')
    ->where('emails_issues.id IS NULL');

这应该转换成像

这样的查询
SELECT
    Emails.id AS `Emails__id`, ...
FROM
    emails AS Emails
LEFT JOIN
    emails_issues emails_issues ON emails_issues.email_id = Emails.id
WHERE
    emails_issues.id IS NULL