Laravel多对多关联如何获取pivot中间表measurement值填充编辑表单
解决方案
第一步:优化控制器查询逻辑,提前预处理客户测量值
修改CustomerMeasurementController.php的editMeasurements方法,将客户已有的测量值转换为以测量部位ID为键的集合,方便视图快速取值:
public function editMeasurements(Request $request, $id){ $customer = Customer::with("measurementparts")->find($id); // 新增以下代码:将测量值按部位ID索引,提升查询效率 $customerMeasurements = $customer->measurementparts->keyBy('id'); $clothType = ClothType::all(); // 把预处理好的测量值传到视图 return view('customerMeasurements.edit', compact('customer', 'clothType', 'customerMeasurements')); }
第二步:修改视图输入框赋值逻辑
找到EditMeasurements.blade.php中测量值输入框的value属性,替换为以下代码:
<input type="text" name="measurement[]" value="{{ $customerMeasurements->get($part->id)?->pivot->measurement ?? '' }}" class="form-control">
上述代码会自动匹配当前部位对应的客户测量值,存在则填充,不存在则留空,不会抛出异常。如果你的PHP版本低于8.0不支持空安全运算符,可以将取值部分替换为{{ optional($customerMeasurements->get($part->id))->pivot->measurement ?? '' }},效果完全一致。
可选优化
你当前定义的CustomerMeasurement.php中间模型内的两个多对多关联在现有业务逻辑中没有被用到,如果没有其他额外需求可以直接删除,不影响现有功能运行。
内容的提问来源于stack exchange,提问作者Muhammad Umair Ghaznavi
相关产品推荐
相关产品推荐

