在CakePHP 3应用程序中,如何构建查询,该查询从不包含它关联表的表中查找?

StackOverflow https://stackoverflow.com//questions/25019422

  •  21-12-2019
  •  | 
  •  

是否有一种简单的方法来获得QueryBuilder的contain方法的倒数?

我正在使用与加入表的属于源关联,以关联两种模型。

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
.

它将选择没有分配任何问题的所有电子邮件。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top