2

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

Entita
id int(11)
描述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 的模型函数来做到这一点?

谢谢

4

1 回答 1

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')));
于 2009-12-17T04:57:37.420 回答