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

Laravel控制器foreach循环中如何逐个获取request的amount值?

Laravel 数组运算错误:Unsupported operand types: array + string

问题代码

控制器中订单存储逻辑如下:

public function store(Request $request)
{
    $values = []; 

    $request->validate([
        'order_number' => 'required',
        'client_id' => 'required|exists:clients,id',
        'description' => 'required',
        'products' => 'required|exists:products,id',
        'amount' => 'required',
    ]);

    $order = Order::create($request->all());

    foreach ($request->products as $product) {
            $values[] = [
                'order_id' => $order->id,
                'product_id' => $product,
                'amount' => $request->amount,
            ];

            $amount = Product::find($product);
            $total_value = $request->amount + $amount->amount; // 错误触发位置
            $amount->update(['amount' => $total_value]);
        }

        $order->products()->attach($values);
        return redirect('/')->with('msg', 'Order Saved successfully!');
    }

错误原因

报错信息为 Unsupported operand types: array + string,核心问题是:

  • $request->amount是数组结构(对应每个选中产品的数量),但代码中直接将整个数组与$amount->amount(单个数值)执行加法运算,类型不匹配导致报错。

Product 模型代码

protected $fillable = [
    'name',
    'price',
    'amount',
];

public function orders()
{
    return $this->belongsToMany(Order::class);
}

解决代码及说明

修改后的控制器代码

public function store(Request $request)
{
    $values = []; 

    $request->validate([
        'order_number' => 'required',
        'client_id' => 'required|exists:clients,id',
        'description' => 'required',
        'products' => 'required|array|exists:products,id',
        'amount' => 'required|array|same:products', // 验证数组长度与products一致
    ]);

    // 仅传递订单核心字段,避免批量赋值风险
    $order = Order::create($request->only('order_number', 'client_id', 'description'));

    // 带索引循环,匹配产品与对应数量
    foreach ($request->products as $index => $productId) {
        $currentAmount = $request->amount[$index];

        $values[] = [
            'order_id' => $order->id,
            'product_id' => $productId,
            'amount' => $currentAmount,
        ];

        $product = Product::find($productId);
        $totalValue = $currentAmount + $product->amount;
        $product->update(['amount' => $totalValue]);
    }

    $order->products()->attach($values);
    return redirect('/')->with('msg', '订单保存成功!');
}

关键修改点

  • 验证规则补充array类型校验,新增same:products确保数量数组与产品数组长度一致,避免数据不匹配
  • 使用带索引的foreach循环,通过$index获取当前产品对应的单个数量值,解决数组与数值运算的类型冲突
  • 订单创建时使用$request->only()指定字段,避免批量赋值的安全问题
  • 变量命名优化,避免$amount这类容易混淆的命名

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 13:40:36