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

Laravel Eloquent插入数据报“Incorrect integer value”错误如何修复?

问题根因

你调用MasterItem::whereIn('id',$master_item_id)->get('price')返回的是Eloquent集合对象,每个元素是仅携带price字段的MasterItem模型实例,而非直接的价格数值。你循环时直接把模型实例赋值给price字段,Laravel会自动将模型序列化为JSON字符串,就出现了报错里的{"price":1000000}格式错误。
另外还有潜在问题:whereIn返回的结果顺序默认按主键升序排列,和你前端传入的master_item_id顺序不一定一致,直接按下标$key取价格会出现价格和商品不匹配的错误。

最优修复方案

直接把价格查询结果按商品ID为索引返回,循环时直接用商品ID取对应价格即可,同时也规避了顺序不一致的问题,修正后的控制器代码如下:

$this->validate($request, [
    'master_item_id.*' => ['required'],
    'quantity.*' => ['required', 'numeric', 'gt:0']
]);

$master_item_id = array_map('intval', $request->master_item_id);
$quantity = array_map('intval', $request->quantity);
// 改动点:用pluck返回以商品ID为键、价格为值的一维数组
$prices = MasterItem::whereIn('id', $master_item_id)->pluck('price', 'id');

$transaction = Transaction::create([
    'total_price' => 0, // 先初始化为0后面累加
    'last_edited_by' => Auth::user()->name
]);

$totalPrice = 0;
foreach ($master_item_id as $key => $no) {
    $input['transaction_id'] = $transaction->id; // 原代码这里字段名写错了,对应外键是transaction_id
    $input['master_item_id'] = $no;
    $input['quantity'] = $quantity[$key];
    // 改动点:用商品ID直接取对应价格数值
    $input['price'] = $prices[$no];
    TransactionItem::create($input);
    // 累加总金额,后续更新订单总价
    $totalPrice += $input['price'] * $input['quantity'];
}

// 回写订单总金额
$transaction->update(['total_price' => $totalPrice]);

内容的提问来源于stack exchange,提问作者SomeRandomCode

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 07:18:04