这是我的简单代码:
$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/