6

由于唯一验证器在更新操作时出错(“此用户名已被使用”),当新用户名值不等于上一个值时,我想在更新操作上验证用户名,这是我的规则:

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

我的功能是获取 prev 用户名值:

public static function getOldUsername($id)
{
    return static::findIdentity($id)->username;
}

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

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

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

提前致谢

4

3 回答 3

7

我认为你可以使用$user->isAttributeChanged('username');

示例(我没有测试此代码):

[['username'], 'unique', 'on'=>'update', 'when' => function($model){
    return $model->isAttributeChanged('username')
}],
于 2017-03-22T08:12:35.530 回答
2

我应该说我的代码是正确的,现在运行良好,错误来自,。哎呀!!

我希望这个问题对其他观众有用,谢谢。

于 2016-11-08T12:43:57.230 回答
0
[
    'login', 'unique', 
    'targetAttribute' => ['login'], 
    'filter' => ['!=', 'id', Yii::$app->request->get('id')], 
    'targetClass' => '\app\models\User', 
    'message' => 'This login has already been taken.',
],
于 2018-03-27T13:38:48.397 回答