Yii 2 中 beforeSave 和 afterSave 事件用法

Yii 2框架中,beforeSave和afterSave是模型事件,用于在数据保存前后的处理。beforeSave允许在入库前修改数据,模拟MySQL触发器行为。此方法需返回true以确保数据操作继续。afterSave同样提供区分插入或更新的能力,并能获取旧值。

beforeSaveafterSave 继承自 BaseActiveRecord => ActiveRecord,任何继承了 ActiveRecord 的模型都可以重写这两个方法。beforeSave 可以对入库前的数据进行处理,此操作可以实现类似 MySQL 触发器的效果。参数 $insert 为布尔值,true 时触发 EVENT_BEFORE_INSERTfalse 时触发 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 的参数 $insertbeforeSave 一样可以判断插入或者更新。如果是更新操作,$changedAttributes 可以拿到旧值。

public function afterSave($insert, $changedAttributes) {
    parent::afterSave($insert, $changedAttributes);

    Yii::debug($changedAttributes); // 旧值数组
    Yii::debug($this->name); // 新值
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值