1

有没有一种简单的方法来获得查询构建器的contain方法的逆?

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

电子邮件表$this->belongsToMany('Issues');

问题表$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 文档中遗漏了一些东西,但我找不到它。

4

1 回答 1

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

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

于 2014-07-29T20:12:03.117 回答