如果新值等于prev值,则跳过yii2对更新操作的唯一验证

SAD*_*ADi 6 yii2 yii2-validation

由于更新操作上的唯一验证器获取错误('此用户名已被占用')我想在新用户名值不等于prev值时验证更新操作上的用户名,这是我的规则:

        [['username'], 'unique', 'on'=>'update', 'when' => function($model){
                return static::getOldUsername($model->id) !== $model->username;
            }
        ],
Run Code Online (Sandbox Code Playgroud)

并且我的功能是获得上一个用户名值:

public static function getOldUsername($id)
{
    return static::findIdentity($id)->username;
}
Run Code Online (Sandbox Code Playgroud)

但它不起作用,我认为$ model-> getId()没有返回任何因为静态id(例如:23)它的工作.

        [['username'], 'unique', 'on'=>'update', 'when' => function($model){
                return static::getOldUsername(23) !== $model->username;
            }
        ],
Run Code Online (Sandbox Code Playgroud)

我怎样才能获得模特ID?或者,如果您有其他方法可以在更新操作上跳过yii2唯一验证,如果新值等于prev值,请解释一下.

提前致谢

小智 5

我想你可以用 $user->isAttributeChanged('username');

示例(我不测试此代码):

[['username'], 'unique', 'on'=>'update', 'when' => function($model){
    return $model->isAttributeChanged('username')
}],
Run Code Online (Sandbox Code Playgroud)