Задать вопрос
@dev400

Как правильно валидировать уникальное поле?

Пытаюсь сделать телефон уникальным, делаю по примеру других правил валидации
['phone', 'trim'],
            ['phone_repeat', 'trim'],
            ['phone', 'required'],
            ['phone_repeat', 'required'],
            ['phone', 'string', 'min' => 10],
            ['phone_repeat', 'compare', 'compareAttribute' => 'phone'],
            ['phone', 'unique', 'targetClass' => '\app\models\User', 'message' => 'Телефон занят'],


Но при попытке записи телефона, который уже есть в базе, получаю исключение..
  • Вопрос задан
  • 198 просмотров
Подписаться 1 Оценить Комментировать
Решения вопроса 2
@davidnum95
Можешь свой валидатор написать. Что то типа:
public function validatePhone($attribute, $params)
    {
        if (!$this->hasErrors()) {
            $user = User::findOne(['phone' => $this->$attribute]);

            if ($user ) {
                $this->addError($attribute, 'Телефон занят');
        }
    }

В rules:
['phone', 'validatePhone'],
Ответ написан
qonand
@qonand
Software Engineer
Если речь идет о номере телефоне Вы сначала должны сохранять данные в базу приводя их к единому формату. Если же номере телефонов в базе уже находятся в одном формате, тогда можете использовать валидатор Unique
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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