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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 19:24:00