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

Foi útil?

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')));
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top