【问题标题】:Validate that each comma separated value exists in database?验证数据库中是否存在每个逗号分隔值?
【发布时间】: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 我刚刚做了,谢谢!

标签: laravel laravel-5


【解决方案1】:

尝试以下方法:

$this->validate($request,[ 'unit.*' => 'required|exists:units.id,'.$units, ]);

由于$units 是一个数组,规则unit.* 应该检查数组的每个元素。

【讨论】:

  • is $units 在这个例子中不是一个数组,否则我们得到一个数组到字符串的转换错误?
  • @SamBremner,可能也应该使用'unit' => 'array'
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-18
  • 2021-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-30
相关资源
最近更新 更多