Wie erstelle ich in einer Cakephp 3-App eine Abfrage, die alles aus einer Tabelle findet, die NICHT die zugehörige Tabelle enthält?

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

  •  21-12-2019
  •  | 
  •  

Frage

Gibt es eine einfache Möglichkeit, die Umkehrung von zu erhalten? contain Methode des Querybuilders?

Ich verwende ZugehörigkeitenzuMany-Zuordnungen mit einer Verknüpfungstabelle, um die beiden Modelle zu verknüpfen.

E-MailsTabelle $this->belongsToMany('Issues');

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

Ich kann also nicht einfach so etwas tun:

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

Es sieht so aus, als würde das Gegenteil der folgenden E-Mails zu E-Mails führen, denen noch KEINE Probleme zugeordnet sind:

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

Ich glaube, mir fehlt etwas in der Dokumentation zu cakephp 3 ORM/Querybuilder, aber ich kann es nicht finden.

War es hilfreich?

Lösung

Ich beschäftige mich noch nicht so sehr mit dem Abfrage-Builder und bin mir daher nicht sicher, ob es einfachere Methoden gibt, aber ein Left-Join sollte es tun.

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

Dies sollte in eine Abfrage wie „

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

Dadurch würden alle E-Mails ausgewählt, denen keine Probleme zugewiesen sind.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top