Laravel从不同的ID获取所有行

时间:2018-11-09 03:54:01

标签: php laravel eloquent

今天,我只是在练习自己的技能而陷入困境。我只想使用特定的ID从数据库中获取数据,这些ID放在会话中作为数组。问题是,我找不到一种方法来获取包含这些ID的所有数据。 这是我的购物车结帐方法

public function checkout(){
    $uniqid = session('products');
    $post=Post::find($uniqid);
    return view('pages.checkout')->with('post',$post);
  }

我什么也没得到,即使我试图得到一些数据,但只有7个这样的数据,我只能得到一个字段。 这是会话产品数组

0   "15be4aa3b55f10"
1   "15be4814ceb2a0"
2   "15be4814ceb2a0"
3   "15be4aa3b55f10"
4   "15be4aa3b55f10"
5   "15be4aa3b55f10"
6   "15be4aa3b55f10"
7   "15be4aa3b55f10"

3 个答案:

答案 0 :(得分:2)

您可以尝试以下方法:

public function checkout(){
    $uniqid = session('products');

    $products = Post::whereIn('unique_id', $uniqid)->get();
    return view('pages.checkout')->with('products',$products);
 }

where whereIn 方法采用字段名称和值数组

来自laravel docs

  

whereIn方法验证给定数组中是否包含给定列的值

答案 1 :(得分:0)

find查询返回单行数据。如果要获取多个数据,请使用all查询:

$post = Post::all();

或者如果您想获取与$uniqid具有相同ID的所有数据,请使用where查询:

$post = Post::where('column_name', $uniqid)->get();

编辑

如果您的会话具有许多ID,则可能要循环查找与id相同的$uniqid的所有数据

public function checkout(){
   $products = []; 
   foreach(session('products') as $session){
      $post=Post::find($session->id);
      $products[] = $post;
   }
   return view('pages.checkout')->with('products ',$products);
}

答案 2 :(得分:0)

您应该使用whereIn()方法来获取针对多个ID的记录。这样做

  public function checkout(){
    $uniqidsArray= session('products');
    $post=DB::table('yourTableName')
                    ->whereIn('id', $uniqIdsArray)
                    ->get();
    return view('pages.checkout')->with('post',$post);
  }