表单验证数组,如何同时验证多个字段?

业务场景:零售物品,需要验证物品数量小于库存数量
前端数据:

{
    orders:[
        {goods_id:1,goods_name:'记事本',number: 20},
        {goods_id:2,goods_name:'圆珠笔',number: 10},
    ]
}

后端使用laravel的表单验证

public function rules()
{
    return [
        'orders.*.goods_id' => [
            'required',
            'exits:goods,id',
            // 请问这里如何获取 当前goods_id对应的number字段,需要进行库存查询
        ]
    ];
}
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
最佳答案

自问自答,目前还没发现更好的解决方法。我把自认为最优的解决方法贴出来了。

public function rules()
{
    return [
        'orders.*.goods_id' => [
            'required',
            'exits:goods,id',
            function ($attribute, $value, $fail) {
               // 目前发现这样也可以获取到goods_id对应的number字段
                dd($this->input(str_replace('goods_id', 'number', $attribute)));
            }
        ]
    ];
}
3年前 评论
讨论数量: 5

这需要单独写针对这个复杂类型的字段验证

3年前 评论

在写一个校验的
'orders.*.number' => ["required", xxxxx]

3年前 评论
tianxionglu (作者) 3年前
91it (楼主) 3年前
return [
     'orders.*.goods_id' => [
            'required',
            'exits:goods,id',
            // 请问这里如何获取 当前goods_id对应的number字段,需要进行库存查询
            function($attribute, $value, $fail) {
                // $value 就是你想要的值
            }
        ]
]; 

具体参考表单验证《Laravel 7 中文文档》

3年前 评论
zxdstyle (作者) 3年前
91it (楼主) 3年前

教程里面没有写怎么实现吗?

谢谢!

3年前 评论

自问自答,目前还没发现更好的解决方法。我把自认为最优的解决方法贴出来了。

public function rules()
{
    return [
        'orders.*.goods_id' => [
            'required',
            'exits:goods,id',
            function ($attribute, $value, $fail) {
               // 目前发现这样也可以获取到goods_id对应的number字段
                dd($this->input(str_replace('goods_id', 'number', $attribute)));
            }
        ]
    ];
}
3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!