Подтвердить что ты не робот

Как установить уникальность для нескольких полей в ActiveRecord (Yii2)?

Как установить уникальность для нескольких полей в ActiveRecord (Yii2)? Я пробовал, как написано в руководстве

['a1', 'unique', 'targetAttribute' => ['a1', 'a2']]

Но это не сработает.

4b9b3361

Ответ 1

Вы должны использовать атрибут вместо targetAttribute

['a1', 'unique', 'attribute' => ['a1', 'a2']]

В этом случае поле 'a1' получит сообщение об ошибке.

И еще один случай:

[['a1', 'a2'], 'unique', 'attribute' => ['a1', 'a2']]

Теперь атрибуты "a1" и "a2" получат сообщение об ошибке, если "a1" и "a2" не уникальны вместе.

Ответ 2

targetAttribute будет использоваться по состоянию на последние yii2 docs (2017)

['a1', 'unique', 'targetAttribute' => ['a1', 'a2']]

В этом случае поле 'a1' получит сообщение об ошибке.

И еще один случай:

[['a1', 'a2'], 'unique', 'attribute' => ['a1', 'a2']]

Теперь атрибуты "a1" и "a2" получат сообщение об ошибке, если "a1" и "a2" не уникальны вместе.

для пользовательского сообщения comboNotUnique будет использоваться вместо message

[['a1', 'a2'], 'comboNotUnique' => 'Package Id already exist.', 'unique', 'attribute' => ['a1', 'a2']]

Ответ 3

Вы можете написать свои уникальные поля, как показано ниже:

[['field1','field2'], 'unique']

Теперь оба, field1 и field2 должны быть уникальными.

По официальному документу Yii2:

targetAttribute: имя атрибута в targetClass, которое должно использоваться для проверки уникальности входного значения. Если он не установлен, он будет использовать имя проверяемого атрибута. Вы можете использовать массив для проверки уникальности нескольких столбцов одновременно.