通过 重写模型 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]]]);
}
}
}