【发布时间】:2018-03-11 13:49:03
【问题描述】:
使用 Laravel 5.4,我的用户有一个自动完成助手将值放入输入中。我想在插入时验证每个值是否存在于数据库中。
“单位”的输入值:“12,13,14”
在插入之前,如何检查单元“12”、单元“13”和单元“14”是否存在于数据库中?
$units = array_filter(array_unique(explode(",", $request->unit)));
// input "12,13,14" becomes [12,13,14]
$this->validate($request,[
'unit' => 'required|exists:units.id,'.$units,
]);
我是否必须使用自定义验证规则,或者 laravel 是否有一些方便的东西,比如 'required|existsAllValuesInThisArray' 之类的东西?在文档中没有找到任何关于它的内容。
我也发现了这个,但从外观上看,它是用于多个选择字段或复选框之类的东西。
$validator = Validator::make($request->all(), [
'person.*.email' => 'email|unique:users',
'person.*.first_name' => 'required_with:person.*.last_name',
]);
更新:我最终使用 javascript 将输入拆分为一个数组,然后将其发送出去进行处理。所以我的输入名称变成了“units[]”而不是“units”
【问题讨论】:
-
我认为您有两种可能的方法:在 js 中修改您的输入并向服务器发送一个数组,使用您发布的第二个 sn-p 并使用自定义验证规则进行验证
-
试试
$this->validate($request,[ 'unit.*' => 'required|exists:units.id,'.$units, ]);。由于$units是一个数组,规则unit.*应该检查数组的每个元素。 -
@JoséA.Zapata ,你的答案是正确的。可以发一下吗?
-
@Darius 我刚刚做了,谢谢!