Cakephp删除全部后

时间:2014-11-22 07:34:10

标签: php cakephp cakephp-2.3

为什么cakephp在saveAll和deleteAll之后没有像beforeSave()和beforeDelete()之类的回调?我知道cakephp使用foreach用于deleteAll()和saveAll,它使用默认的delete()和save()函数。但是它不会使用太多的查询,如果我设置了任何函数,如afterSave(),beforeSave(),因为它将在每次执行save()函数时执行。

cakephp不需要saveAll(),deleteAll()的单独函数吗?如我错了请纠正我。

1 个答案:

答案 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;
}