Laravel Eloquent加入表和计数相关

时间:2018-04-17 18:32:16

标签: php laravel eloquent

我有两个表,类别和产品。我试图添加一个查询来计算每个类别的产品,而无需预先分类。我到达了下面的查询:

DB::table('categories')->leftJoin('product', 'categories.id', '=','categpry_id')
->selectRaw('categories.*, count(product.id) as Count')
->where('product.status',1)
->groupBy('categories.id')
->get();

但我遇到的问题是,当一个类别没有产品时,它没有显示出来。我想在数组中显示没有带有0个产品的产品的类别。

3 个答案:

答案 0 :(得分:0)

我很确定你可以使用rightJoin

虽然不是100%肯定。

答案 1 :(得分:0)

您可以使用Eloquent的FALSE方法:

withCount

每个$categories = Category::withCount('products')->get(); 都有一个$category属性。

答案 2 :(得分:0)

代码中的第一行在某些方面很糟糕

'categories.id', '=','categpry_id')

  1. 你有一个错字
  2. 同时添加表格'categories.id', '=', 'products.category_id'
  3. 如果您正在使用模型,那么您应该... @DigitalDrifter有一个“雄辩”的解决方案。

    两个旁白

    1. 我不会在你的别名中使用mysql保留字。而是COUNT(product.id) AS product_count
    2. 您可以使用传递给select的数组来最小化原始语句。
    3. 以下是我要使用的内容

      Categories::leftJoin(Product::class, 'product.category_id', '=', 'categories.id')
          ->select([
              'categories.*',
              DB::raw('COUNT(products.id) AS product_count')
          ])
          ->where('product.status', 1)
          ->groupBy('categories.id')
          ->get();
      

      TIL。

      Model::withCount('relation')这也非常酷。