Laravel使用attach向order_service中间表插入price字段失败怎么办
问题排查与解决方法
核心错误原因
你调用attach()方法的传参格式错误:Laravel的attach()方法第二个参数接收所有中间表额外字段组成的单关联数组,你将qty和price拆成了两个独立数组分别作为第二、第三参数传入,第三个参数不会被attach()识别处理,因此price字段没有被赋值,最终写入了表结构设置的默认值0。
修复代码
将循环内的attach调用修改为如下格式即可:
$order->services()->attach($services[$service], [ 'qty' => $quantities[$service], 'price' => $price[$service] ]);
额外注意事项
- 请检查
Order模型的services关联定义,必须在belongsToMany方法后加上withPivot声明中间表的额外字段,否则后续读取关联时无法获取到这两个字段的值:
// Order.php 模型内的关联定义 public function services() { return $this->belongsToMany(Service::class, 'order_service') ->withPivot('qty', 'price'); }
- 传入的
price是字符串类型,建议转成浮点型再存入数据库,避免潜在的类型匹配问题:'price' => (float)$price[$service]
内容的提问来源于stack exchange,提问作者Zahra
相关产品推荐
相关产品推荐

