【问题标题】:How to get from request->value one value at a time inside foreach loop如何在foreach循环中一次从request->value获取一个值
【发布时间】:2023-02-03 20:19:40
【问题描述】:

你好,我在 laravel 控制器中有这段代码,我收到一个错误的单个值:

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; //the error happens here

               $amount->update(['amount' => $total_value]);
            }

            $order->products()->attach($values);

            return redirect('/')->with('msg', 'Order Saved successfully!');
        }

除了 $request->amount 之外的所有值都作为数组出现,而不是作为一行中的单个值出现。这是我得到的错误:

不支持的操作数类型:数组+字符串

这是产品型号:

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

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

这是dd($request->amount);

【问题讨论】:

  • 请出示您的产品型号,以便我们了解amount是如何定义的。还提供一个{{ dd($request->amount) }},这样我们就可以看到它包含的调试内容。从提供的代码看来,您似乎在遍历产品 ID,但只有一个金额值——这很可能是一个与 ID 长度相同的数组
  • @MatthewBradley 我添加了它,请现在检查
  • @MatthewBradley 和for loop 代码有效,但我被告知在这种情况下使用foreach

标签: laravel


【解决方案1】:

假设$request->amount 与带有索引的$request->products 直接相关,那么您需要在发送请求之前组合productsamount,或者使用索引迭代products

foreach ($request->products as $index => $product) {

            $values[] = [
                'order_id' => $order->id,
                'product_id' => $product,
                'amount' => $request->amount[$index], //Reference via index
            ];

            $amount = Product::find($product);

           $total_value = $request->amount[$index] + $amount->amount; //Also here
        }
    }

【讨论】:

  • 谢谢,这很好用!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-17
  • 1970-01-01
  • 2018-06-05
  • 1970-01-01
  • 2020-09-16
相关资源
最近更新 更多