我有两个表,类别和产品。我试图添加一个查询来计算每个类别的产品,而无需预先分类。我到达了下面的查询:
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个产品的产品的类别。
答案 0 :(得分:0)
我很确定你可以使用rightJoin
。
虽然不是100%肯定。
答案 1 :(得分:0)
您可以使用Eloquent的FALSE
方法:
withCount
每个$categories = Category::withCount('products')->get();
都有一个$category
属性。
答案 2 :(得分:0)
'categories.id', '=','categpry_id')
'categories.id', '=', 'products.category_id'
如果您正在使用模型,那么您应该... @DigitalDrifter有一个“雄辩”的解决方案。
COUNT(product.id) AS product_count
。select
的数组来最小化原始语句。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();
Model::withCount('relation')
这也非常酷。