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

Laravel:从指定列提取数据存入另一表及报错解决

问题修复:Laravel数据插入报错"Attempt to assign property ... on null"

错误根源

  1. 变量名重复覆盖:初始创建的purchase_order模型实例被后续查询结果(集合)覆盖,导致最后调用save()时操作的是集合而非模型对象,触发报错。
  2. foreach语法错误:foreach($PO as $key->$PO) 是错误写法,正确格式应为foreach(集合 as 单条数据)。
  3. 插入字段不完整:未将表单提交的po_date、sum等公共字段加入插入数据,不符合业务需求。
  4. 字段名存在多余空格:插入数组中的'item_qty '和'dep_name '带有空格,会导致数据库字段匹配失败。

修正后的代码

1. 路由调整

替换原GET路由,改为通过控制器传递数据到视图:

Route::get('addPO', [AdminController::class, 'showPOForm']);
Route::post('/addPO', [AdminController::class, 'addDataOrder']);

2. AdminController方法修正

添加表单展示方法,同时修复数据插入逻辑:

// 展示采购订单表单,传递已审批的采购申请数据
public function showPOForm()
{
    $approvedRequests = DB::table('purchase__requests')
        ->where('status', 'Approved')
        ->get();
    return view('admin.PO', compact('approvedRequests'));
}

// 处理采购订单数据插入
public function addDataOrder(Request $request)
{
    // 提取表单提交的公共字段
    $commonFields = [
        'po_date' => $request->po_date,
        'sum' => $request->sum,
        'vat' => $request->vat,
        'approved_by' => $request->approved_by
    ];

    // 查询所有已审批的采购申请
    $approvedRequests = DB::table('purchase__requests')
        ->select('item_name','description','item_qty','dep_name')
        ->where('status', 'Approved')
        ->get();

    // 循环插入每条采购订单数据,合并公共字段与申请数据
    foreach($approvedRequests as $item){ 
        DB::table('purchase_order')->insert(
            array_merge($commonFields, [
                'item_name' => $item->item_name,
                'description' => $item->description,
                'item_qty' => $item->item_qty, 
                'dep_name' => $item->dep_name,
            ])
        );   
    }

    return redirect()->back()->with('success', '采购订单已批量创建');
}

3. PO.blade.php视图修正

修复foreach变量名冲突,修正隐藏input的value错误:

<form action="{{url('/addPO')}}" method="POST">
    @csrf
    <div class="form-group row">
        <label class="col-lg-4 col-form-label" for="po_date">Order Date <span class="text-danger">*</span> </label>
        <div class="col-lg-6">
            <input type="date" class="po_date" id="po_date" name="po_date" required="" />
        </div>
    </div>
    <br />
    <div class="table-responsive">
        <table class="table text-start align-middle table-bordered table-hover mb-0">
            <thead>
                <tr class="text-dark">
                    <th scope="col">PR ID</th>
                    <th scope="col">Item Name</th>
                    <th scope="col">Description</th>
                    <th scope="col">Quantity</th>
                    <th scope="col">Department</th>
                </tr>
            </thead>
            @foreach($approvedRequests as $requestItem)
            <tbody>
                <tr>
                    <td><input type="text" value="{{$requestItem->PR_id}}" hidden="">{{$requestItem->PR_id}}</td>
                    <td><input type="text" value="{{$requestItem->item_name}}" hidden="">{{$requestItem->item_name}}</td>
                    <td><input type="text" value="{{$requestItem->description}}" hidden="">{{$requestItem->description}}</td>
                    <td><input type="text" value="{{$requestItem->item_qty}}" hidden="">{{$requestItem->item_qty}}</td>
                    <td><input type="text" value="{{$requestItem->dep_name}}" hidden="">{{$requestItem->dep_name}}</td>
                </tr>
            </tbody>
            @endforeach
        </table>
    </div>
    <br />
    <br />
    <div class="form-group row">
        <label class="col-lg-4 col-form-label" for="sum">Sum<span class="text-danger">*</span></label>
        <div class="col-lg-6">
            <input type="number" class="sum" id="sum" name="sum" required="" />
        </div>
    </div>

    <div class="form-group row">
        <label class="col-lg-4 col-form-label" for="vat">Vat<span class="text-danger">*</span></label>
        <div class="col-lg-6">
            <input type="number" class="vat" id="vat" name="vat" required="" />
        </div>
    </div>
    <div class="form-group row">
        <label class="col-lg-4 col-form-label" for="approved_by">Approved By<span class="text-danger">*</span> </label>
        <div class="col-lg-6">
            <input type="text" class="approved_by" id="approved_by" name="approved_by" required="" />
        </div>
    </div>
    <br />
    <br />
    <div class="form-group row">
        <div class="">
            <input type="submit" class="btn btn-success" name="submit" value="Submit" />
        </div>
    </div>
</form>

内容的提问来源于stack exchange,提问作者Nardos Mesfin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 07:36:32