Php 拉雷维尔:当有多个项目时,我只从我的表中得到一个项目。我如何获取所有这些数据并将其输出?

Php 拉雷维尔:当有多个项目时,我只从我的表中得到一个项目。我如何获取所有这些数据并将其输出?,php,database,laravel,session,Php,Database,Laravel,Session,我正在使用会话创建基本购物车。会话中有多个ID,范围为1-3 当我使用foreach输出数据时,它只输出表中的第一项。我希望所有相关的项目出现。我该怎么做呢 这是我的控制器的索引函数: public function index() { session_start(); $cartData = implode(',', $_SESSION['cart']); $cartProducts = Product::where('id',$cartData)->get();

我正在使用会话创建基本购物车。会话中有多个ID,范围为1-3

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

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

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
"1,1,3"
Original

small

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

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
"1,1,3"
Original

small

8
最后得出实际输出:

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
"1,1,3"
Original

small

8

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

您应该使用where(相当于sql中的where()),而不使用内爆(直接使用数组)

这将解决您的问题。

您有两个问题:

  • 您正在传入一个ID字符串而不是数组
  • 其中
    仅查找单个值
  • 因此,查询实际上变成了
    ,其中id='1,1,3'
    ,它可能只与
    1
    的id匹配。要修复它,请传入实际数组,并使用
    ,其中

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

    这会将查询更改为
    其中id位于(1,1,3)

    谢谢!这已经解决了:)不要使用
    $\u SESSION
    SESSION\u start
    ,您可以使用
    SESSION
    facade/helper来执行此操作。。。你没有按你应该的那样使用Laravel,小心你会养成坏习惯。。。