Найдите условия типа «НЕ СУЩЕСТВУЕТ» - PullRequest
2 голосов
/ 16 декабря 2009

У меня в БД 2 таблицы ...

Entita
id int (11)
descrizione varchar (50)
.....

Publicobjects
....
модель varchar (50) нужная мне модель (в данном случае 'Entita' )
model_id int (11)

Я хотел бы сделать запрос следующим образом:
select entita.* from entita where NOT EXISTS (select * from publicobjects where publicobjects.model = 'Entita' and publicobjects.model_id = entita.id)

Как я могу сделать это с функциями модели Cakephp без использования пользовательского запроса?

Спасибо

1 Ответ

2 голосов
/ 17 декабря 2009

Я полагаю, что вы пытаетесь найти строки из таблицы Entita, которых нет в таблице Publicobjects. Предполагая, что это правильно, вот SQL-запрос для MySQL, чтобы найти его:

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

Чтобы сделать это с моделями CakePHP, нужно сделать пару шагов. Я сделал некоторые предположения относительно названий вашей модели, но могу ошибаться, и их легко исправить.

Сначала добавьте это к модели Entita:

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

Теперь вы можете проверить записи, которые отсутствуют в таблице Publicobjects, например:

<?php
$this->Entita->find('all', array('conditions' => array('Publicobject.model_id IS NULL')));
...