簡體   English   中英

Laravel Eloquent - 如何使用 Eloquent 只獲得每個父母的 2 個孩子?

[英]Laravel Eloquent - how to get only 2 child of each parent using Eloquent?

我想獲得只有 2 個子類別而不是所有子類別的類別。 如下圖 output

Category 1
  subcategory 1, 
  subcategory 2,
Category 2
  subcategory 1,
  subcategory 2, 
Category 3
  subcategory 1,
  subcategory 2

共有5個類別,每個類別有5個子類別

類別.php

class Category extends Model {
    public function subcategory(){
        return $this->hasMany('App\Subcategory');
    }

    public function limitSubcategory(){
        return $this->hasMany('App\Subcategory')->limit(2);
    }
}

子類別.php

class Subcategory extends Model {
    public function category(){
        return $this->belongsTo('App\Category');
    }
}

HomeController.php

方法一:

Category::with(['limitSubcategory' => function($query) {

}])->get();

方法二:

Category::with(['subcategory' => function($query) {
   $query->limit(2);
}])->get();

但它在第一類中只有 2 個子類。

點擊此處查看 output

請幫助我,如何獲得?

在您的 controller 中,當您像這樣$categ = Category::all()檢索類別時,您可以使用$categ->limit_subcategory

如果您想通過急切加載優化請求並且在 sql 請求中沒有 N+1 問題,您可以執行$categ = Category::whth(['limitSubcategory']->get()

閱讀這部分文檔以獲取有關急切加載https://laravel.com/docs/7.x/eloquent-relationships#eager-loading的更多信息

你可以使用特性:HasEagerLimit:

你可以安裝它:

composer require staudenmeir/eloquent-eager-limit:"^1.0"

然后在您的 model 中:

class Category extends Model {
use \Staudenmeir\EloquentEagerLimit\HasEagerLimit;

    public function subcategory(){
        return $this->hasMany('App\Subcategory');
    }

public function limitSubcategory(){
    return $this->hasMany('App\Subcategory')->limit(2);
}
}

以及在子類別 model 中:

class Category extends Model {
use \Staudenmeir\EloquentEagerLimit\HasEagerLimit;
}

現在:當你加載你的關系時......它應該返回你想要的結果:

$results=Category::with('limitSubcategory')->get();

更多細節在: https://github.com/staudenmeir/eloquent-eager-limit

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM