繁体   English   中英

用雄辩的关系来计算查询

[英]count query using eloquent relation laravel

我有三个表,分别称为categorysubcategoryproduct

category

id       category_name

subcategory

id      category_id     sucategory_name

并且product表有

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

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

 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间接引用了其类别。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM