LARAVEL:当有多个项目时,我只从 table 中得到一个项目。我将如何获得所有这些并输出它们?

LARAVEL: I am only getting one item from my table when there are multiple items. How would I get all of them and output them?

我正在使用会话创建基本购物车。 session中有多个ID,从1-3不等。

当我使用 foreach 输出数据时,它只输出 table 中的第一项。我希望所有相关项目都出现。我该怎么做?

这是我的控制器的索引函数:

public function index()
{
    session_start();
    $cartData = implode(',', $_SESSION['cart']);
    $cartProducts = Product::where('id',$cartData)->get();
    return view('basket',['cartProducts'=>$cartProducts ],['cartData' =>$cartData] );
}

这是我在购物车页面上的输出:

  @foreach($cartProducts as $cartProduct)


         <p>{{$cartProduct->name}}</p>
         <p>{{$cartProduct->size}}</p>
         <p>{{$cartProduct->price}}</p>

  @endforeach

出于测试目的,这是我的 $cartData 转储和死机:

"1,1,3"

最后是实际输出:

Original

small

8

你只是在使用 where,这对你想要实现的目标没有帮助。

您应该使用 whereIn(等同于 sql 中的 wherein())而不内爆(直接使用数组)。

->whereIn('id', $cartData)

这应该可以解决您的问题。

您有两个问题:

  1. 您传递的是 ID 字符串而不是数组
  2. where 只查找单个值。

所以查询实际上变成了where id = '1,1,3',可能只匹配到1的id。要修复它,传入实际数组,并使用 whereIn:

Product::whereIn('id', $_SESSION['cart'])->get();

这会将查询更改为 where id IN (1,1,3)