首页 > 解决方案 > 多次运行 where()

问题描述

问题:如何对 $cart 中的所有行运行 where 查询,而不是仅对 $cart[0]、[1] 或 [2] 运行查询。

我正在尝试在 Laravel 中手动编写购物车代码。由于我是新手,所以我被困在一个点上。请看下面的代码:

public function showCart()
{
    $user = Auth::user();
    $cart = Cart::where('user_id', $user->id)->get();
    $product = Products::where('id', $cart[0]->product_id)->get();
    return view('showCart')
           ->with('cart', $cart)
           ->with('user', $user)
           ->with('product', $product);
}

这是我显示用户购物车的功能。在这里,我试图显示用户在他的购物车中拥有的所有产品,并发送一个包含产品详细信息的变量。

但是,当我尝试将用户购物车中的所有产品作为 $product 数组发送时,我只得到了第一个产品。那是因为 $cart 中返回的行不止一个,但我无法编写查询来获取此行中的所有产品:

$product = Products::where('id', $cart[0]->product_id)->get();

. . . 因为,很明显,我正在编写一个查询以仅匹配 $cart 中返回的第一行。

提前致谢。

标签: phplaravellaravel-5eloquentlaravel-4

解决方案


您可以使用whereIndata_get辅助函数:

$product = Products::whereIn('id', data_get($cart, '*.product_id'))->get();

data_get适用于数组和对象。或者,您可以仅将Arr::get用于数组。


推荐阅读