Dans une application cakephp 3, comment puis-je créer une requête qui trouve tout à partir d'une table qui ne contient PAS sa table associée ?

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

  •  21-12-2019
  •  | 
  •  

Question

Existe-t-il un moyen simple d'obtenir l'inverse de contain méthode du générateur de requêtes ?

J'utilise des associations AppartientToMany avec une table de jointure pour associer les deux modèles.

Tableau des e-mails $this->belongsToMany('Issues');

Tableau des problèmes $this->belongsToMany('Emails');

donc je ne peux pas faire quelque chose comme :

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

Il semble que l'inverse de ce qui suit fournirait des e-mails qui n'ont PAS encore de problèmes associés :

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

Je pense qu'il me manque quelque chose dans la documentation cakephp 3 ORM/Querybuilder, mais je ne le trouve pas.

Était-ce utile?

La solution

Je ne suis pas encore très intéressé par le générateur de requêtes, donc je ne sais pas s'il existe des méthodes plus simples, mais une jointure gauche devrait le faire.

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

Cela devrait se traduire par une requête comme

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

qui sélectionnerait tous les e-mails auxquels aucun problème n’est attribué.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top