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

时间:2014-07-29 15:42:46

标签: php cakephp cakephp-3.0

是否有一种简单的方法可以获得查询构建器的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文档中的内容,但我无法找到它。

1 个答案:

答案 0 :(得分:3)

我在查询构建器中还没有那么多,所以我不确定是否有更简单的方法,但左连接应该这样做。

$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

可以选择所有未分配任何问题的电子邮件。