Laravel下Voyager后台多对多关联商品存储时related_id为空问题求助
修复方案
1. 修正视图层代码
核心错误是将name属性错误写在<option>标签上,且多选下拉框未添加multiple属性,导致前端无法正常提交related_id数组到后端,是字段为null的根本原因。
修正后的代码:
<div class="form-group col-md-8"> <label class="control-label">关联商品</label> <!-- name属性添加到select标签,同时加multiple支持多选 --> <select class="form-control chosen-select" name="related_id[]" multiple> @foreach($products as $product) <option class="form-control" value="{{$product->id}}"> {{$product->name}} </option> @endforeach </select> </div>
2. 修正控制器层代码
原代码循环判断条件错误,且无需手动操作中间表插入数据,直接调用Laravel多对多关联的原生方法即可:
if($data->save()) { // 使用sync方法批量写入关联数据,第二个参数传false可避免删除旧关联,按需调整 $data->related()->sync($request->input('related_id', [])); return response()->json([ 'success' => true, 'last_insert_id' => $data->id, 'related_id' => $request->input('related_id'), ], 200); }
3. 可选优化
你已经在Product模型中定义了规范的多对多关联,无需单独创建中间表RelatedProduct模型,无特殊需求可直接删除该冗余文件。
内容的提问来源于stack exchange,提问作者Muhammad Shahzaib
相关产品推荐
相关产品推荐

