关于Yii2 behaviors() 小记

public function behaviors()
{
    $inherit = parent::behaviors();

    $inherit['memory'] = [
        'class' => \yii\behaviors\AttributeBehavior::className(),
        'attributes' => [
            \yii\db\ActiveRecord::EVENT_BEFORE_UPDATE => 'values',
            \yii\db\ActiveRecord::EVENT_BEFORE_INSERT => 'values',
        ],

        'value' => function ($event) {
            $model = $event->sender;

            if ($model->key == self::NAME_MEMORY_PERIOD_PROTOTYPE) {
                ...
            }

            return $model->values;
        },
    ];

    return $inherit;
}

之前一直有点蒙,今天测试一下,得出一些结果.

假设数据表有 id, key, values 三个字段

'attributes' => [
    \yii\db\ActiveRecord::EVENT_BEFORE_UPDATE => 'values',
],

'value' => function ($event) {
    $model = $event->sender;

    if ($model->key == self::NAME_MEMORY_PERIOD_PROTOTYPE) {
        ...
    }

    return $model->value;
},
  • EVENT_BEFORE_UPDATE, EVENT_BEFORE_INSERT 事件发生在save之前.’value’必须有返回值,返回值会填入到对应字段中;$model->values$model->oldAttributes['values']值不相同.

  • EVENT_AFTER_UPDATE, EVENT_AFTER_INSERT 事件发生在save之后.’value’可以没有返回值. $model->values$model->oldAttributes['values']值相同.

  • 若点击编辑后未做任何修改便直接提交,不会触发EVENT_BEFORE_UPDATEEVENT_AFTER_UPDATE事件,甚至连updated_at都不会改变。

  • 不是只有修改’values’字段的内容才触发EVENT_BEFORE_UPDATE事件。修改’key’字段同样会触发EVENT_BEFORE_UPDATE事件。

  • ‘attributes’是关联数组,所以不能有两个相同的键,否则后面会覆盖前面的值;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值