为什么cakephp在saveAll和deleteAll之后没有像beforeSave()和beforeDelete()之类的回调?我知道cakephp使用foreach用于deleteAll()和saveAll,它使用默认的delete()和save()函数。但是它不会使用太多的查询,如果我设置了任何函数,如afterSave(),beforeSave(),因为它将在每次执行save()函数时执行。
cakephp不需要saveAll(),deleteAll()的单独函数吗?如我错了请纠正我。
答案 0 :(得分:1)
正如您自己所说,saveAll和deleteAll基本上只是save()
和delete()
的包装。因此,它将触发beforeSave()
和beforeDelete()
,每行数据都是保存或删除。因此,添加单独的beforeSaveAll和beforeDeleteAll并不是必需的。是的,它可以运行很多查询,但这不是一个问题。它提供了一种方法来模拟保存或删除的每一行数据,而不是完成一个可以完全工作或失败的单个批量操作(因为当它们捆绑到一个操作中时它们彼此依赖)
如果您想要将任何自定义逻辑添加到每个 saveAll和deleteAll操作(请确保这是您真正想要的!并且请记住,除非您继续调用常规的beforeSave和beforeDelete禁用每个saveAll和deleteAll中的回调,您只需在AppModel
中使用自己的实现覆盖这些方法,然后在#34;之前调用您的自定义"逻辑,如:
// 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;
}