doniyorbekm
@doniyorbekm
Yii-шник

Уникальность логина при редактировании пользователя?

Привет!
Юзаю Yii2 и пишу user management. Вот такой функцией в модели проверяю логин на уникальность
public function checkUniqueness($attribute, $params)
    {
        $data = self::find()->where(['alive'=>1, 'name'=>$this->login])->all();
        if(!empty($data)) {
            $this->addError($attribute, Yii::t('app', 'This login is occupied'));
        }
    }

Rules стоит такой:
['login', 'checkUniqueness', 'on' => self::SCENARIO_INSERT],

Но при редактировании можно легко вписать любой уже имеющийся логин. Как этого избежать?
  • Вопрос задан
  • 221 просмотр
Пригласить эксперта
Ответы на вопрос 3
@karminski
Senior React.JS Developer
А чем вас не устраивает встроенный валидатор unique?
Ответ написан
Примерно такая проверка для всех сценариев:
$collision = self::find()->where(['and', ['alive' => 1], ['name' => $this->login], ['!=', 'id', $this->id]])->count();
if ($collision > 0) {
    ...
}
Ответ написан
@Toey
для проверки уникальности если использовать валидатор свой
можно так
public function checkUniqueness($attribute, $params)
{
    $data = self::find()->where([ 'name'=>$this->login])->one();
    if(!is_null($data)){
         $this->addError($attribute, Yii::t('app', 'This login is occupied'));
    }        
}

на не нужно выбирать все записи нам надо знать если хотя бы одна с таким логином.
или использовать uniquevalidator
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы