@teodor7teodor7

Как проверить только новею запись на уникальность в Yii2?

Подскажи нужно редактировать иммеющиеся даные, но фильтровать, что бы были уникальные данные или те что есть очтовались. Подскажите более эллегантный вариант.
public function rules() {
    return [
      // username and password are both required
      [['login', 'email'], 'required', 'message' => 'Необходимо заполнить поле.'],
      ['email', 'email'],
      ['login', 'match', 'pattern' => '/^[a-z]\w*$/i', 'message' => 'Только латинский шрифт, цифры и подчеркивыние.'],
      [['password', 'confirmPassword'], 'validationPassword'],
      [['id', 'login', 'email'], 'validationLoginEmail'],
    ];
  }

  public function validationLoginEmail($attribute, $params) {
    
    (int) $this->id;
 
    $patern_user = User::findByLogin($this->login);
    
    if ($patern_user != null and $this->id != $patern_user->id  ) {
      $this->addError('login', 'Такой логин уже существует.');
       
    }
    
    $patern_user = User::findByEmail($this->email);
 
    if (  $patern_user != null and $this->id != $patern_user->id) {
      $this->addError('email', 'Такой e-mail уже существует.');
    }  
  
    
    }
  • Вопрос задан
  • 191 просмотр
Пригласить эксперта
Ответы на вопрос 2
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
Обратите внимание, что в yii есть сценарии update и create, их можно создавать и использовать в том числе в rules, например:
[['email', 'login'], 'unique', 'on'=>'update']
Так же есть $model->isNewRecord возвращающий true или false
Ответ написан
Комментировать
mhthnz
@mhthnz
PHP, YII2, Golang, Linux
\app\models\Users и users.id заменить на свою модель с таблицей юзерс
[['email', 'login'], 'unique', 'targetClass' => \app\models\Users::className(), 'filter' => 'users.id != '.$this->id]
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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