Php 在更新时保存之前点火
我需要在updateAll()上触发beforeSave()和afterSave()回调。我使用updateAll()是因为我需要更新ID字段。。(我知道关于可编辑ID的事情有点“错误”,但我使用的这个数据库已经像那样乱七八糟了) 我需要做的是,像save()一样,在beforeSave()和afterSave()之前触发updateAll() 下面是对CakePHP 1.3中updateAll()的一点修改Php 在更新时保存之前点火,php,callback,cakephp-2.0,Php,Callback,Cakephp 2.0,我需要在updateAll()上触发beforeSave()和afterSave()回调。我使用updateAll()是因为我需要更新ID字段。。(我知道关于可编辑ID的事情有点“错误”,但我使用的这个数据库已经像那样乱七八糟了) 我需要做的是,像save()一样,在beforeSave()和afterSave()之前触发updateAll() 下面是对CakePHP 1.3中updateAll()的一点修改 function updateAll($fields, $conditions = t
function updateAll($fields, $conditions = true) {
$args = func_get_args();
$output = call_user_func_array(array('parent', 'updateAll'), $args);
if ($output) {
$created = false;
$options = array();
$this->Behaviors->trigger($this, 'afterSave', array(
$created,
$options,
));
$this->afterSave($created);
$this->_clearCache();
return true;
}
return false;
}
这就是我在CakePHP2.3中调整的代码
function updateAll($fields, $conditions = true) {
$args = func_get_args();
$output = call_user_func_array(array('parent', 'updateAll'), $args);
if ($output) {
$created = false;
$options = array();
$event = new CakeEvent('Model.afterSave', $this, array($created, $options));
$this->getEventManager()->dispatch($event);
$this->afterSave($created);
$this->_clearCache();
return true;
}
return false;
}
问题是,如果我想在updateAll中调用beforeSave(),该怎么办?我问了一个多么愚蠢的问题 代码如下:
function updateAll($fields, $conditions = true) {
$options = array();
$event = new CakeEvent('Model.beforeSave', $this, array($options) );
list($event->break, $event->breakOn) = array(true, array(false, null));
$this->getEventManager()->dispatch($event);
$args = func_get_args();
$output = call_user_func_array(array('parent', 'updateAll'), $args);
if ($output) {
$created = false;
$options = array();
$event = new CakeEvent('Model.afterSave', $this, array($created, $options));
$this->getEventManager()->dispatch($event);
$this->afterSave($created);
$this->_clearCache();
return true;
}
return false;
}