Pregunta

Tengo 2 tablas en mi db ...

entità
Identificación del int (11) Descripción varchar (50)
.....

Publicobjects
....
modelo varchar (50) el modelo que necesito (en este caso 'entità' )
model_id int (11)

Me gustaría hacer una consulta como esta:
select entita.* from entita where NOT EXISTS (select * from publicobjects where publicobjects.model = 'Entita' and publicobjects.model_id = entita.id)

¿Cómo puedo hacer esto con las funciones de modelo de CakePHP sin consulta utilización personalizada?

Gracias

¿Fue útil?

Solución

Creo que usted está tratando de encontrar filas de la tabla entità que no están en la tabla Publicobjects. Suponiendo que es correcto, aquí está la consulta SQL para MySQL para encontrar que:

SELECT `entita`.*
FROM `entita` 
LEFT JOIN `publicobjects` ON (`publicobjects`.`model` = 'entita' 
    AND `publicobjects`.`model_id` = `entita`.`id`)
WHERE `publicobjects`.`model_id` IS NULL

Para hacer este trabajo con los modelos de CakePHP toma un par de pasos. He hecho algunas suposiciones acerca de sus nombres de modelos, pero podría estar equivocado y esos son fáciles de solucionar.

Primero se debe agregar esto al modelo entità:

<?php
var $hasOne = array('Publicobject' => array(
    'foreignKey' => 'model_id',
    'conditions' => 'Publicobject.model = "Entita"'));

Ahora, puede comprobar si hay entradas que faltan en la tabla Publicobjects como esto:

<?php
$this->Entita->find('all', array('conditions' => array('Publicobject.model_id IS NULL')));
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top