2

这是我的简单代码:

$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'

为什么会这样?

4

1 回答 1

4

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

于 2012-10-23T12:49:22.187 回答