查找“NOT EXISTS”等条件

时间:2009-12-16 17:32:24

标签: mysql cakephp cakephp-appmodel

我的数据库中有2个表...

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

Publicobjects
....
model 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 个答案:

答案 0 :(得分:2)

我相信您正在尝试从Entita表中查找不在Publicobjects表中的行。假设这是正确的,这是MySQL查找它的SQL查询:

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')));