Laravel Eloquent 验证请求的 items 字段 foreach

Posted

技术标签:

【中文标题】Laravel Eloquent 验证请求的 items 字段 foreach【英文标题】:Laravel Eloquent Validation request's items field foreach 【发布时间】:2018-02-27 07:25:12 【问题描述】:

我正在用 Laravel 编写验证器,所以我收到了 json 格式的请求。

我已经为主要的 json 字段(例如 id、name)编写了验证逻辑......现在我在 json 中有对象数组,我需要验证这个数组中传递的每个项目。

这里是json请求的例子:https://api.myjson.com/bins/ob3lh

到目前为止,这是我的验证器:

 private function update()
  
    return [
      'id' => 'required',
      'place_id' => 'required',
      'place_table_id' => 'required',
      'user_id' => 'required',
      'seen' => 'required',
      'state' => 'required',
      'number' => 'required',
      'date' => 'required',
      'price' => 'required',
      'table_number' => 'required',
      'note' => 'required',
    ];
  

我怎样才能简单地添加例如将验证每个项目对象的嵌套验证器?

【问题讨论】:

将对象转为数组然后验证 点赞"array.*.obj_name" => "required" 【参考方案1】:

您可以像这样定义嵌套的验证规则:

private function update()

    return [
        'id' => 'required',
        'place_id' => 'required',
        'place_table_id' => 'required',
        'user_id' => 'required',
        'seen' => 'required',
        'state' => 'required',
        'number' => 'required',
        'date' => 'required',
        'price' => 'required',
        'table_number' => 'required',
        'note' => 'required',
        'items' => 'required|array|min:1',
        'items.*.id' => 'required',
        'items.*.name' => 'required',
        'items.*.amount' => 'required',
        'items.*.price' => 'required',
    ];

您可以在文档中找到更多信息:https://laravel.com/docs/5.5/validation#validating-arrays

【讨论】:

“*”是处理数组索引还是只是动态路径 这看起来不错,但我还需要一件事。无论数组项数如何,如何完成这项工作?如果我通过“items”:[],验证失败,但当我通过“items”:“[]”时有效。 它只验证现有项目。如果您想确保始终至少有 1 个或多个项目,您可以添加以下行:'items' => 'array|min:1', @RojVroemen 'items' => 'array|min:0' 终于解决了我的问题。感谢您的回复!

以上是关于Laravel Eloquent 验证请求的 items 字段 foreach的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 4.1 身份验证会话数据不会跨请求持久化

Laravel 测试身份验证。使用 Illuminate\Database\Eloquent\ModelNotFoundException 的后续登录尝试失败

laravel 在角色上使用 eloquent 驱动程序进行身份验证

Laravel Eloquent 验证插入异常?

Laravel:如何使用 eloquent ORM 查找未经过身份验证的用户的信息?

Laravel Eloquent 在连接中使用 WHERE 而不是 AND