【问题标题】: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;
    }
    

    【讨论】:

      猜你喜欢
      • 2019-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多