Как в приложении cakephp 3 создать запрос, который находит все из таблицы, которая НЕ содержит связанную с ней таблицу?

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

  •  21-12-2019
  •  | 
  •  

Вопрос

Есть ли простой способ получить обратное значение contain метод построителя запросов?

Я использую ассоциации ownToMany с таблицей соединения, чтобы связать две модели.

Электронная почтаТаблица $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, но я не могу этого найти.

Это было полезно?

Решение

Я еще не очень разбираюсь в построителе запросов, поэтому не уверен, есть ли более простые методы, но левое соединение должно помочь.

$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