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

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

{
    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字段,需要进行库存查询
        ]
    ];
}
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 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年前 评论

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