Size: a a a

2020 May 27

S

Serj in Yii Framework 2
подскажите, пожалуйста.
есть рулез вида:
          [['name'], 'unique'],
но стала необходимость проверять на уникальность это поле только если user_id установлен определенный. я прописал такой фильтр:
          [['name'], 'unique', 'filter' => static function($query) {
               return $query->where(['user_id' => Yii::$app->user->identity->id]);
           }],
но он не сработал. тогда прописал такой:
          [['name'], 'unique', 'filter' => ['user_id' => Yii::$app->user->identity->id]
           но он тоже не отрабатывает. даже сообщение не кидает о том, что значение существует. в чём я накосячил?
источник

OK

Oleg Kuzmenko in Yii Framework 2
Serj
подскажите, пожалуйста.
есть рулез вида:
          [['name'], 'unique'],
но стала необходимость проверять на уникальность это поле только если user_id установлен определенный. я прописал такой фильтр:
          [['name'], 'unique', 'filter' => static function($query) {
               return $query->where(['user_id' => Yii::$app->user->identity->id]);
           }],
но он не сработал. тогда прописал такой:
          [['name'], 'unique', 'filter' => ['user_id' => Yii::$app->user->identity->id]
           но он тоже не отрабатывает. даже сообщение не кидает о том, что значение существует. в чём я накосячил?
Тут не фильтр,а when нужен
источник

S

Serj in Yii Framework 2
Oleg Kuzmenko
Тут не фильтр,а when нужен
сейчас попробую, спасибо
источник

ДК

Дмитрий Кожанов... in Yii Framework 2
user_id определенный, а ты все время подставляешь текущего юзера
источник

S

Serj in Yii Framework 2
просто в доке сказано, что он дополняет запрос к бд и, по идее, такое должно было пройти
источник

S

Serj in Yii Framework 2
Дмитрий Кожанов
user_id определенный, а ты все время подставляешь текущего юзера
определенный - текущего пользователя. в системе много пользователей.
я оговорился)
например, пользователь создает заголовки к статьям и они не должны повторяться только для его аккаунта
источник

OK

Oleg Kuzmenko in Yii Framework 2
Serj
определенный - текущего пользователя. в системе много пользователей.
я оговорился)
например, пользователь создает заголовки к статьям и они не должны повторяться только для его аккаунта
А, ну тогда filter, да
источник

OK

Oleg Kuzmenko in Yii Framework 2
У тебя в БД точно записывается user_id? Ты точно залогинен?
источник

S

Serj in Yii Framework 2
да
источник

V

Victooor in Yii Framework 2
Дамир ...
В MySQL чем его можно заменить? По описанию это функция работы со строками, она будет работать быстрее?
ух, Explain конечно же 😀
источник

S

Serj in Yii Framework 2
мне кажется, я где-то туплю. и when не отрабатывает
[['name'], 'unique', 'when' => static function($model) {
               return $model->user_id == Yii::$app->user->identity->id;
           }],
источник

OK

Oleg Kuzmenko in Yii Framework 2
Serj
да
Дампни ->identity->id
источник

OK

Oleg Kuzmenko in Yii Framework 2
Serj
мне кажется, я где-то туплю. и when не отрабатывает
[['name'], 'unique', 'when' => static function($model) {
               return $model->user_id == Yii::$app->user->identity->id;
           }],
Это не подходит
источник

OK

Oleg Kuzmenko in Yii Framework 2
Я сначала подумал, что надо проверять только если юзер_ид === какому-то конкретному. Тогда было бы when
источник

S

Serj in Yii Framework 2
Oleg Kuzmenko
Я сначала подумал, что надо проверять только если юзер_ид === какому-то конкретному. Тогда было бы when
почему текущий ид пользователя не может быть конкретным ?)
источник

OK

Oleg Kuzmenko in Yii Framework 2
Потому что тут 2 разных варианта валидации:

1 (правильный) — всегда проверять, нет ли такого заголовка у текущего юзера
2 (неправильный) — выполнять валидацию на уникальность только в том случае, если юзер_ид === 1
источник

OK

Oleg Kuzmenko in Yii Framework 2
По описанию, полагаю, все подумали, что ты пытаешься реализовать второй вариант
источник

S

Serj in Yii Framework 2
Oleg Kuzmenko
Потому что тут 2 разных варианта валидации:

1 (правильный) — всегда проверять, нет ли такого заголовка у текущего юзера
2 (неправильный) — выполнять валидацию на уникальность только в том случае, если юзер_ид === 1
первый, ага.
буду пробовать с unique filter тогда
источник

OK

Oleg Kuzmenko in Yii Framework 2
Serj
первый, ага.
буду пробовать с unique filter тогда
Именно так и нужно
источник

OK

Oleg Kuzmenko in Yii Framework 2
when указывает на то, нужно ли выполнять текущее правило валидации в принципе
источник