No cakephp 3 aplicativo, como faço para criar uma consulta que localiza todos os a partir de uma Tabela que NÃO contenha encontra-se associado da tabela?

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

  •  21-12-2019
  •  | 
  •  

Pergunta

Existe uma maneira simples de obter o inverso da contain método de querybuilder?

Eu estou usando belongsToMany associações com uma tabela associativa para associar os dois Modelos.

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

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

então eu não posso simplesmente fazer algo como:

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

Parece que o inverso da seguinte iria fornecer e-Mails que NÃO têm Problemas associados ainda:

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

Eu acho que deve estar faltando alguma coisa do cakephp 3 ORM/Querybuilder documentação, mas eu não posso encontrá-lo.

Foi útil?

Solução

Eu não estou ainda que tanto o construtor de consultas, então eu não tenho certeza se existem métodos mais simples, mas um left join deve fazê-lo.

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

Isso deve se traduzir em uma consulta como

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

qual seria selecione todos os e-mails que não têm quaisquer problemas atribuídos.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top