Laravel从Purchase表取数插入products表报decimal类型错误怎么解决
错误原因
你调用的get('price')方法返回的是Eloquent集合实例,序列化为字符串后就是你看到的[{"price":"25.00"}]格式,和purchase_purchaseprice字段要求的decimal数值类型不匹配,因此触发格式错误。
解决方案
直接使用Laravel查询构造器提供的value()方法,查询时直接返回单个字段的原始值,是该场景下的最优写法,查询效率最高:
将原代码中purchase_purchaseprice对应的取值逻辑替换为以下内容即可:
Purchase::where('id', $request->product)->value('price')
修正后的完整代码如下:
Product::create([ 'purchase_id' => $request->product, 'price' => $price, 'discount' => $request->discount, 'description' => $request->description, 'purchase_purchaseprice' => Purchase::where('id', $request->product)->value('price'), ]);
补充优化建议
你的purchase_purchaseprice字段设置为非空,为了避免传入的$request->product对应的Purchase记录不存在时取值为null导致报错,可以加上默认值兜底:
Purchase::where('id', $request->product)->value('price') ?? 0.00
如果需要先获取完整的Purchase模型实例做其他逻辑处理,也可以用first()方法取单条记录后再读取price属性:
$purchase = Purchase::where('id', $request->product)->first(); // 其他对$purchase的处理逻辑 Product::create([ 'purchase_id' => $request->product, 'price' => $price, 'discount' => $request->discount, 'description' => $request->description, 'purchase_purchaseprice' => $purchase->price ?? 0.00, ]);
内容的提问来源于stack exchange,提问作者Aaron Christopher
相关产品推荐
相关产品推荐

