cakephp - 为什么deleteAll使用SELECT?

标签 cakephp sql-delete

这是我的简单代码:

$this->deleteAll(array('expiration <=' => CakeTime::format('Y-m-d H:i:s', time())));

我在查询结果中看到了这一点:

SELECT `Token`.`id` FROM `cake`.`tokens` AS `Token` WHERE `expiration` <= '2012-10-23 14:37:04'
DELETE `Token` FROM `cake`.`tokens` AS `Token` WHERE `Token`.`id` = (6)

简而言之,CakePHP 似乎首先检索符合条件的记录的 id,然后使用检索到的 id 进行删除。

但这没有意义,因为它可以直接使用给定的条件进行:

DELETE `Token` FROM `cake`.`tokens` AS `Token` WHERE `expiration` <= '2012-10-23 14:37:04'

为什么会发生这种情况?

最佳答案

如果您想要运行模型回调或级联删除来删除相关记录,则需要单独获取和删除记录。因此,为 deleteAll() 函数的 $cascade$callbacks 参数传递 false,并且将使用单个查询删除记录,而无需检索先记录一下。

关于cakephp - 为什么deleteAll使用SELECT?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13030686/

相关文章:

mysql - 从关系数据库表中删除重复记录

python - 覆盖 Django Rest ViewSets 删除行为

php - Cakephp:我如何将所有丢失的 Controller /操作调用路由到一个单一的一般错误页面?

php - 面包屑未添加到缓存 View 中

mysql - CAKEPHP Mysql查询数据格式

sql - 如何删除不在其中的记录

mysql删除日期大于特定日期的行

php cake find() 使用 OR 条件

CakePHP:从数据库读取模型时可以忽略字段吗?

jquery - Mysql 删除本地 var 部分工作的行