Yii 设置默认数据的实现

通过 重写模型 afterSave 方法实现 添加 或 设置 默认地址的时候 更新用户其他 地址为非默认。

本文只是拿 设置默认收货地址的场景举例,具体 模型 实现如下

<?php

namespace app\models;

use Yii;
use yii\behaviors\TimestampBehavior;

/**
 * 数据表 "{{%user_address}}" 的模型
 * 
 * 收货地址
 * 
 * @version 0.1.3
 * @author 简爱 <sc.419@qq.com>
 * @link https://asilu.com/
 * 
 * @property int $id Id
 * @property int $user_id User Id
 * @property string $name 姓名
 * @property string $phone 电话
 * @property string $address 地址
 * @property int|null $is_default 默认地址
 * @property int|null $created_at 创建时间
 *
 * @property User $user
 */
class UserAddress extends \yii\db\ActiveRecord
{
    // 重写 afterSave
    public function afterSave($insert, $changedAttributes)
    {
        parent::afterSave($insert, $changedAttributes);
        // 首先判断的 当前数据是否为默认 也就是 is_default == 1  且是否为新增数据 或 是否修改 is_default 字段
        if($this->is_default == 1 && ($insert || isset($changedAttributes['is_default']))){
            // 更新当前用户 非当前 数据 is_default 字段值为 0
            self::updateAll(['is_default' => 0], ['AND', ['user_id' => $this->user_id], ['NOT', ['id' => $this->id]]]);
        }
    }
}

Post Author: admin