Как установить уникальность для нескольких полей в ActiveRecord (Yii2)?
Как установить уникальность для нескольких полей в ActiveRecord (Yii2)?
Я пробовал, как написано в руководстве
['a1', 'unique', 'targetAttribute' => ['a1', 'a2']]
Но это не сработает.
Ответы
Ответ 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
, которое должно использоваться для проверки уникальности входного значения. Если он не установлен, он будет использовать имя проверяемого атрибута. Вы можете использовать массив для проверки уникальности нескольких столбцов одновременно.