Laravel同时获取2个where子句的数据

时间:2018-05-29 17:28:58

标签: laravel

我需要帮助才能在下面的代码中找出我的错误:

public function finderfunction(Request $request) {

    // get array of categories that signed to finder (1,2,3)
    $finder = Finder::with('categories')->get();
    $catid = [];
    foreach($finder as $findd){
      foreach($findd->categories as $finddcat){
        $catid[] = $finddcat->id;
      }
    }
    //get products with those categories (1,2,3) (first where)
    $results = Product::where('category_id', $catid)
    //get products with those categories and same sku's (second where)
    ->where('sku', $request->input('brand_id'))
      ->groupBy('products.sku')
      ->get();
     return view('front.finder', compact('results'));
  }

如您所见,我在上面的代码中发表了评论,这是我尝试实现的目标:

  1. 我的Finder模型已分配类别ID 1,2,3
  2. 然后,我尝试将所有产品都包含在1,2,3
  3. 类别中
  4. 然后我再次过滤它们以获得它们之间相同sku的产品
  5. screen1

    问题

    在我的测试过程中,我发现如果我在$catid中用$results = Product::where('category_id', $catid)替换静态类别ID,我可以得到我的结果,但是当我使用上面相同的代码时,没有结果会返回, I get my custom message for those time that no result can be found.

    有什么想法吗?

2 个答案:

答案 0 :(得分:2)

尝试使用 whereIn 执行代码,例如此代码Product::whereIn('category_id', $catid)。希望你能得到你想要的结果。

答案 1 :(得分:1)

首先,你的$ catid变量是一个数组。你不能将数组作为参数传递给eloquent where。您可以将数组作为

传递
$users = DB::table('users')
           ->whereIn('id', [1, 2, 3])
           ->get();

其次,检查你的$ catid是否成功获得了价值。

第三,要在条件中写多个,你可以将它作为数组传递给 -

$users = DB::table('users')->where([
    ['status', '=', '1'],
    ['subscribed', '<>', '1'],
])->get();

https://laravel.com/docs/5.6/queries

请参阅此链接以获取进一步的帮助。