In un'app CakePhp 3, come posso costruire una query che trova tutto da una tabella che non contiene la sua tabella associata?

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

  •  21-12-2019
  •  | 
  •  

Domanda

C'è un modo semplice per ottenere l'inverso del metodo contain del querybuilder?

Sto usando le associazioni di appartomany con una tavola di unione per associare i due modelli.

Emailstable $this->belongsToMany('Issues');

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

Quindi non posso fare solo qualcosa come:

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

Sembra che l'inverso dei seguenti fornirebbe e-mail che non hanno ancora problemi associati:

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

Penso di dover mancare qualcosa dalla Documentazione CakePhp 3 Orm / Querybuilder, ma non riesco a trovarlo.

È stato utile?

Soluzione

Non sono ancora così tanto nel costruttore di query, quindi non sono sicuro se ci sono metodi più semplici, ma un join sinistro dovrebbe farlo.

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

Questo dovrebbe tradurre in una query come

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
.

che selezionare tutte le e-mail che non hanno problemi assegnati.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top