为什么deleteAll使用SELECT?

时间:2012-10-23 12:44:06

标签: 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'

为什么会这样?

1 个答案:

答案 0 :(得分:4)

如果您要运行模型回调或级联删除以删除依赖记录,则需要单独获取和删除记录。因此,为$cascade函数的$callbacksdeleteAll()参数传递false,并且将使用单个查询删除记录,而不首先检索任何记录。