正如你已经说过,saveAll和deleteAll基本上只是save()
和delete()
的包装。因此它会触发beforeSave()
和beforeDelete()
,每行数据被保存或删除。因此添加一个单独的beforeSaveAll和beforeDeleteAll并不是真的有必要。是的,它可以运行很多查询,但这并不是一个问题。它确实提供了一种方法来模拟保存或删除的每一行数据,而不是执行可以完全工作或完全失败的一个批量操作(因为当您将它们捆绑到一个操作中时,它们都相互依赖)。
如果你想任何自定义逻辑添加到每白水和deleteAll行动(非常肯定的说是你真正想要什么!请记住,经常beforeSave和beforeDelete仍然会被执行,除非你禁用回调每个saveAll和deleteAll),你可以简单地用自己的AppModel
实现覆盖方法,并让它调用你自定义的“before”逻辑,如:
// Add your own custom deleteAll and saveAll to AppModel
public function deleteAll($conditions, $cascade = true, $callbacks = false) {
if ($this->beforeDeleteAll($conditions)) {
parent::deleteAll($conditions, $cascade, $callbacks);
} else {
return false;
}
}
public function saveAll($data = array(), $options = array()) {
if ($this->beforeSaveAll($data, $options)) {
parent::saveAll($data, $options);
} else {
return false;
}
}
// As well as your custom logic
public function beforeDeleteAll($conditions) {
// Do your stuff here
return true;
}
public function beforeSaveAll($data, $options) {
// Do your stuff here
return true;
}