mysql - 查找类似 'NOT EXISTS' 的条件

标签 mysql cakephp cakephp-model

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

实体
id int(11)
描述 varchar(50)
.....

公共(public)对象
....
model varchar(50) 我需要的模型(在本例中为 'Entita')
model_id int(11)

我想这样查询:
选择实体。* 来自实体 where 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')));

关于mysql - 查找类似 'NOT EXISTS' 的条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1916286/

相关文章:

php - 如何获取由cakephp中的updateAll()函数更新的行的id?

php - CakePHP 保存模型和关联模型

PHP/MYSQL : formatting user input data as MYSQL timestamp to search mySQL table

php - Laravel 5.1 更新消息,但它同时涉及 created_at 和 updated_at

mysqldump 在一个命令中将所有表导出为单独的 .sql 文件

mysql - 即使计数为 0,如何获取行?只有一张 table

linux - 自动从临时文件夹 [CakePHP] 中删除文件

cakephp - 如何设置页面为索引页

php - 无法从 Facebook SDK 获取数据

php - CakePHP 模型加载需要一段时间