You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel实现st_in/st_out字段二选一互斥必填校验

Laravel库存出入库记录接口校验实现

业务规则

库存交易提交需满足以下校验要求:

  • 入库字段(参数名st_in)和出库字段(参数名st_out)禁止同时填写
  • 入库、出库字段禁止同时为空
  • 仅当两个字段恰好填写其中一项时,才允许写入交易数据

原有代码问题

当前控制器方法未加任何参数校验,无论参数是否合规都会直接执行数据库写入,不符合业务要求,原有代码如下:

public function stock_record(Request $request){
    $stock=new Transection;
    $stock->in=$request->st_in;
    $stock->out=$request->st_out;
    $stock->product_id=$request->st_name;
    $stock->barcode=$request->barcode;
    $stock->description=$request->st_description;
    $stock->user_id=Auth::id();
    $stock->save();
    return redirect('dashboard')->with('message',"Transection successfully updated");
}

修正后代码

直接在写入前加Laravel原生校验+互斥判断即可,校验失败会自动回退到表单页并携带错误信息,和现有页面交互逻辑适配:

public function stock_record(Request $request){
    // 基础规则校验
    $request->validate([
        'st_in' => 'nullable|numeric|required_without:st_out',
        'st_out' => 'nullable|numeric|required_without:st_in',
        'st_name' => 'required',
        'barcode' => 'required',
        'st_description' => 'nullable|string'
    ], [
        'st_in.required_without' => '入库、出库数量不能同时为空',
        'st_out.required_without' => '入库、出库数量不能同时为空'
    ]);

    // 拦截同时填写出入库的非法请求
    if ($request->filled('st_in') && $request->filled('st_out')) {
        return back()
            ->withErrors(['st_in' => '同一笔记录不能同时填写入库和出库数量'])
            ->withInput();
    }

    // 校验通过才执行数据保存
    $stock = new Transection;
    $stock->in = $request->st_in;
    $stock->out = $request->st_out;
    $stock->product_id = $request->st_name;
    $stock->barcode = $request->barcode;
    $stock->description = $request->st_description;
    $stock->user_id = Auth::id();
    $stock->save();

    return redirect('dashboard')->with('message', '交易记录提交成功');
}

逻辑说明

  • required_without 是Laravel内置验证规则,当对应字段为空时当前字段必填,刚好覆盖「两个字段都为空」的校验场景
  • 额外加的互斥判断专门拦截「两个字段同时填写」的场景
  • 校验失败时框架自动闪存错误信息,前端Blade模板直接读取$errors变量即可渲染错误提示,不需要额外写跳转传参逻辑
  • 给st_in、st_out加了numeric规则,避免传入非数字的非法数量值

内容的提问来源于stack exchange,提问作者Md Mredul Sarker

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 06:09:19