![](/img/trans.png)
[英]Laravel Eloquent Relationship: How to get parent of parent information from child using Laravel eloquent model relationship?
[英]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 個子類。
請幫助我,如何獲得?
在您的 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();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.