如何在ActiveRecord(Yii2)中为多个字段设置唯一性? 我试过手写的
['a1', 'unique', 'targetAttribute' => ['a1', 'a2']]
但它不起作用。
答案 0 :(得分:17)
没有更长的相关性(这似乎是Yii 2早期版本中的一个错误):
您应该使用attribute而不是targetAttribute
['a1', 'unique', 'attribute' => ['a1', 'a2']]
在这种情况下,字段'a1'将收到错误消息。
另一个案例:
[['a1', 'a2'], 'unique', 'attribute' => ['a1', 'a2']]
如果'a1'和'a2'不是唯一的,那么'a1'和'a2'属性将收到错误消息。
<强> CORRECT 强>:
来自docs(经过验证的工作示例)
// a1 needs to be unique
['a1', 'unique']
// a1 needs to be unique, but column a2 will be used to check the uniqueness of the a1 value
['a1', 'unique', 'targetAttribute' => 'a2']
// a1 and a2 need to be unique together, and they both will receive error message
[['a1', 'a2'], 'unique', 'targetAttribute' => ['a1', 'a2']]
// a1 and a2 need to be unique together, only a1 will receive error message
['a1', 'unique', 'targetAttribute' => ['a1', 'a2']]
// a1 needs to be unique by checking the uniqueness of both a2 and a3 (using a1 value)
['a1', 'unique', 'targetAttribute' => ['a2', 'a1' => 'a3']]
答案 1 :(得分:4)
targetAttribute
将使用截至最新的yii2 docs(2017)
['a1', 'unique', 'targetAttribute' => ['a1', 'a2']]
在这种情况下,字段&#39; a1&#39;将收到错误消息。
另一个案例:
[['a1', 'a2'], 'unique', 'attribute' => ['a1', 'a2']]
现在&#39; a1&#39;和&#39; a2&#39;如果&#39; a1&#39;属性将收到错误消息和&#39; a2&#39;并不是唯一的。
将使用自定义消息comboNotUnique
的代替message
[['a1', 'a2'], 'comboNotUnique' => 'Package Id already exist.', 'unique', 'attribute' => ['a1', 'a2']]
答案 2 :(得分:1)
您可以编写如下所示的唯一字段:
[['field1','field2'], 'unique']
现在,field1
和field2
都应该是唯一的。
截至Yii2
的官方文件:
targetAttribute
:targetClass
中属性的名称,用于验证输入值的唯一性。如果未设置,它将使用当前正在验证的属性的名称。 您可以使用数组同时验证多列的唯一性。