Encontre condições como 'não existe'
-
20-09-2019 - |
Pergunta
Eu tenho 2 mesas no meu banco de dados ...
ITITA
Eu iria int (11)
Descriância Varchar (50)
.....
PublicObjects
....
modelo Varchar (50) o modelo que eu preciso (neste caso 'ITITA')
Model_id int (11)
Eu gostaria de fazer uma consulta como esta:
select entita.*
from entita
where NOT EXISTS (select * from publicobjects where publicobjects.model = 'Entita' and publicobjects.model_id = entita.id)
Como posso fazer isso com as funções do modelo de CakePhp sem usar consulta personalizada?
Obrigado
Solução
Eu acredito que você está tentando encontrar linhas da tabela do INTITA que não estão na tabela PublicObjects. Supondo que isso esteja correto, aqui está a consulta SQL para MySQL para encontrá -la:
SELECT `entita`.*
FROM `entita`
LEFT JOIN `publicobjects` ON (`publicobjects`.`model` = 'entita'
AND `publicobjects`.`model_id` = `entita`.`id`)
WHERE `publicobjects`.`model_id` IS NULL
Para fazer isso funcionar com os modelos do CakePHP, dá algumas etapas. Fiz algumas suposições sobre seus nomes de modelos, mas eu poderia estar errado e essas são fáceis de corrigir.
Primeiro, adicione isso ao modelo da INTITA:
<?php
var $hasOne = array('Publicobject' => array(
'foreignKey' => 'model_id',
'conditions' => 'Publicobject.model = "Entita"'));
Agora, você pode verificar se há entradas que estão faltando na tabela PublicObjects como esta:
<?php
$this->Entita->find('all', array('conditions' => array('Publicobject.model_id IS NULL')));