簡體   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