【发布时间】:2020-12-22 20:33:55
【问题描述】:
我有一种情况,名称字段应该是唯一的,但该规则仅适用于组值与数据库中先前添加的组匹配时。 有一个 group 输入和 name 其他输入,可以由用户动态添加,但为简单起见,我在下面添加了 2 个带有 name[] 属性的输入。 如果将第一个名称输入(未使用第二个名称输入)发送到验证,则它可以工作,但是当两个输入值都发送时,验证不起作用。我该如何解决。提前致谢。
$request->validate([
'group' => 'required',
'name' => [
'required', Rule::unique('group_tbl')->where(function ($query) use ($request){
$query->where('group', $request->get('group'));
})
]
]);
表单输入:
<input name="group" placeholder="group here" required >
<input name="name[]" placeholder="name here" required >
<input name="name[]" placeholder="name here" >
例如,在 db 中添加了组“G”和名称“A”。现在如果提交组输入“G”和名称输入“A”,则会显示验证错误“名称已被占用”。但是如果组输入“G”,名称输入“A”和其他名称输入“B”提交,则没有错误。它不应该被保存,因为组“G”下的名称“A”已经存储在db中。
数据库:
| id | group | name |
|---|---|---|
| 1 | G | A |
【问题讨论】:
-
return是mising就像return $query->where('group', $request->get('group')); -
增加了回报,但没有运气。如果两个输入都填满,则成功。但是,如果最后一个输入为空,则验证有效。
-
name是一个数组,所以这里真正应该唯一的是'name.*' => ... -
我已经尝试过了,但它给出了异常 - SQLSTATE[42S22]: Column not found: 1054 Unknown column 'name.0' in 'where clause' (SQL: select count(*) as聚合
-
也使用
Rule::unique('group_tbl', 'name')指定列名
标签: laravel