我的数据库里有两张桌子。。。
实体
id整数(11)
描述varchar(50)
.....
公共对象
....
模型varchar(50)我需要的模型(在本例中是'Entita')
型号(11)
我想这样查询:
select entita.*from entitawhere NOT EXISTS (select * from publicobjects where publicobjects.model = 'Entita' and publicobjects.model_id = entita.id)
在不使用自定义查询的情况下,如何使用Cakephp的模型函数来实现这一点?
谢谢

最佳答案

我相信您正在尝试从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')));

10-06 08:54