我正在尝试获取productID,因此可以保存到order_product表中。但是我被困住了。

这是我在结帐控制器中的存储功能

//Insert into order product table
if ($order) {
    foreach(session('cart')  as $item) {
        if (empty($item)) {
            continue;
        }

        OrderProduct::create([
            'order_id' => $order->id ?? null,
            'product_id' =>DB::table('products')->get('id'),
           // $products=DB::table('products')->where('id',$id)->get();
            'quantity' => $item['quantity'],
        ]);
   }
}




CartController

   public function cart()
{
    return view('cart');
}

public function addToCart($id)
{
    $userId = Auth::id();
    $products = Products_model::find($id);
    if(!$products) {

        abort(404);

    }

    $cart = session()->get('cart');

    // if cart is empty then this the first product
    if(!$cart) {

        $cart = [
                $id => [
                    "pro_name" => $products->pro_name,
                    "quantity" => 1,
                    "pro_price" => $products->pro_price,
                    "image" => $products->image
                ]
        ];

        session()->put('cart', $cart);

        return redirect()->back()->with('success', 'Product added to cart successfully!');
    }

    // if cart not empty then check if this product exist then increment quantity
    if(isset($cart[$id])) {

        $cart[$id]['quantity']++;

        session()->put('cart', $cart);

        return redirect()->back()->with('success', 'Product added to cart successfully!');

    }

    // if item not exist in cart then add to cart with quantity = 1
    $cart[$id] = [
        "pro_name" => $products->pro_name,
        "quantity" => 1,
        "pro_price" => $products->pro_price,
        "image" => $products->image
    ];

    session()->put('cart', $cart);

    return redirect()->back()->with('success', 'Product added to cart successfully!');
}

public function update(Request $request)
{
    if($request->id and $request->quantity)
    {
        $cart = session()->get('cart');

        $cart[$request->id]["quantity"] = $request->quantity;

        session()->put('cart', $cart);

        session()->flash('success', 'Cart updated successfully');
    }
  }

public function remove(Request $request)
{
    if($request->id) {

        $cart = session()->get('cart');

        if(isset($cart[$request->id])) {

            unset($cart[$request->id]);

            session()->put('cart', $cart);
        }

        session()->flash('success', 'Product removed successfully');
    }
}

}

我需要能够将与订单关联的当前product_id保存在数据库中。因为现在它显示

Incorrect integer value: '[{"id":1},{"id":2}]' for column 'product_id'

任何帮助将不胜感激。

分析解答

您实际上已经将productID保存为数组索引:

$cart = [
    $id => [ // $id is the product id
        // ...
    ]
];

因此,如果要在foreach循环中获取该ID,请使用以下格式:

foreach ($array as $index => $value)

您的代码将是:

foreach (session('cart') as $productId => $item) {
    if (empty($item)) {
        continue;
    }

    OrderProduct::create([
        'order_id'   => $order->id ?? null,
        'product_id' => $productId,
        'quantity'   => $item['quantity'],
    ]);
}