2014-11-22 76 views
0

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

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

回答

1

正如你已经说过,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; 
}