beforeSave 和 afterSave 继承自 BaseActiveRecord => ActiveRecord,任何继承了 ActiveRecord 的模型都可以重写这两个方法。beforeSave 可以对入库前的数据进行处理,此操作可以实现类似 MySQL 触发器的效果。参数 $insert 为布尔值,true 时触发 EVENT_BEFORE_INSERT,false 时触发 EVENT_BEFORE_UPDATE,可以根据这个来判断当前是插入还是更新操作。
beforeSave 方法最终必须返回 true,否则插入或更新操作会失效。
/**
* $insert
* - true 插入操作
* - false 更新操作
*/
public function beforeSave($insert) {
if (!parent::beforeSave($insert)) {
return false;
}
// start
// 此处可以对插入的数据进行处理,比如设置默认值或者替换
$this->status = 1;
$this->name = preg_replace('/\d+/','', $this->name);
// end
// 应该始终返回 true,否则数据插入或更新不会生效
return true;
}
afterSave 的参数 $insert 和 beforeSave 一样可以判断插入或者更新。如果是更新操作,$changedAttributes 可以拿到旧值。
public function afterSave($insert, $changedAttributes) {
parent::afterSave($insert, $changedAttributes);
Yii::debug($changedAttributes); // 旧值数组
Yii::debug($this->name); // 新值
}
Yii 2框架中,beforeSave和afterSave是模型事件,用于在数据保存前后的处理。beforeSave允许在入库前修改数据,模拟MySQL触发器行为。此方法需返回true以确保数据操作继续。afterSave同样提供区分插入或更新的能力,并能获取旧值。
1629

被折叠的 条评论
为什么被折叠?



