使用 eloquent 关系 laravel 计数查询

count query using eloquent relation laravel

我有三个 table,分别是 categorysubcategoryproduct

category

id       category_name

subcategory

id      category_id     sucategory_name

producttable有

id     category_id      subcategory_id      productname

现在我想要的是,我想获得属于该子类别的产品总数。

我的categorymodel长得像

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\Relation;
use App\Subcategory;

class Category extends Model
{
    protected $table = 'category';

    public $timestamps = false;

    public function subCategory(){

        return $this->hasMany('App\Subcategory', 'category_id');
    }
}

和我的 subcategory 模特

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Subcategory extends Model
{
    protected $table = 'subcategory';

    public $timestamps = false;


    public function products(){
        return $this->hasMany('App\Products', 'subcategory_id');
    }
}

最后是我的 product 模型

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Products extends Model
{
    protected $table = 'products';

}

但是我已经通过在我的控制器中这样做显示了属于该类别的所有子类别名称

 $categories = Category::with('subCategory')->get();

在我看来,我已经取得了以下成绩。

category 1
  subcategory 1
  subcategory 2
  subcategory 3
category 2
  subcategory 1
  subcategory 2
  subcategory 3

现在我只想计算属于子类别的产品数量,例如 exampole

 category 1
      subcategory 1 (20)
      subcategory 2 (2)
      subcategory 3 (3)
    category 2
      subcategory 1 (12)
      subcategory 2 (11)
      subcategory 3 (2)

我怎样才能达到这样的结果?

$categories = Category::with('subCategory')->get();
foreach ($categories as $category)
{
    echo "{$category->category_name}\n";
    foreach ($category->subCategory as $subcategory)
    {
        echo "\t{$subcategory->subcategory_name} ({$subcategory->products()->count()})\n";
    }
}

只是一个想法。适应您的视图代码。

顺便说一下,我认为你的 product 不应该包含 category_id 因为它已经通过 subcategory_id.

间接引用了它的类别