【问题标题】:Cakephp After delete allCakephp 全部删除后
【发布时间】:2023-03-06 15:53:02
【问题描述】:
为什么 cakephp 没有像 beforeSave() 和 beforeDelete() 这样的 after saveAll 和 deleteAll 的回调?我知道 cakephp 将 foreach 用于 deleteAll() 和 saveAll ,它使用默认的 delete() 和 save() 函数。但是它不会使用太多查询吗,如果我设置了像 afterSave()、beforeSave() 这样的任何函数,因为它会在每次执行 save() 函数时执行。
cakephp 不需要单独的 saveAll()、deleteAll() 函数吗?如我错了请纠正我。
【问题讨论】:
标签:
php
cakephp
cakephp-2.3
【解决方案1】:
正如您自己所说,saveAll 和 deleteAll 基本上只是 save() 和 delete() 的包装。因此它将触发beforeSave() 和beforeDelete() 用于保存或删除每一行数据。所以添加单独的 beforeSaveAll 和 beforeDeleteAll 并不是真正必要的。是的,它可以运行很多查询,但这并不一定是个问题。它确实提供了一种方法来塑造保存或删除的每一行数据,而不是执行一个可以工作或完全失败的单个批量操作(因为当您将它们捆绑到一个操作中时它们都相互依赖)。
如果您想为 every saveAll 和 deleteAll 操作添加任何自定义逻辑(请确保这是您真正想要的!请记住,除非您禁用每个 saveAll 和 deleteAll 中的回调),您可以简单地在 AppModel 中使用您自己的实现覆盖这些方法,并让它调用您的自定义“之前”逻辑,例如:
// 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;
}