4 回答

TA貢獻(xiàn)1853條經(jīng)驗(yàn) 獲得超9個(gè)贊
有一個(gè)專門處理此問(wèn)題的 Laravel 包,稱為Eloquent Eager Limit:
安裝后:
composer?require?staudenmeir/eloquent-eager-limit:"^1.0"
您應(yīng)該在應(yīng)用有限預(yù)加載的模型中使用它:
class PostModel extends Model
{
use \Staudenmeir\EloquentEagerLimit\HasEagerLimit;
?// ........
}
class CategoriesModel
extends Model
{
use \Staudenmeir\EloquentEagerLimit\HasEagerLimit;
?// ........
}
現(xiàn)在這個(gè)查詢將得到你想要的結(jié)果:
$categories = CategoriesModel::with(['pages' => function($query) {
? ? ? ? $query->limit('10');
? ? }])->take("6")->get();

TA貢獻(xiàn)1806條經(jīng)驗(yàn) 獲得超5個(gè)贊
對(duì)于急切加載,您可以使用地圖操作執(zhí)行以下操作:
$categories = CategoriesModel::with('pages')->take(6)->get()
->map(function($q)
{ $q->pages = $q->pages->take(10); // take only 10 query
return $q;
}
);
上述方法之所以必要,是因?yàn)槭芗s束的預(yù)加載查詢大致可轉(zhuǎn)換為 SQL,如下所示:
查詢選擇類別:
select * from `categories`
limit 6;
查詢以獲取關(guān)系
select * from `categories`
inner join `posts` on `categories`.`id` = `posts`.`category_id`
where `posts`.`category_id` in (id's from categories query)
limit 10;

TA貢獻(xiàn)1772條經(jīng)驗(yàn) 獲得超6個(gè)贊
首先,您的控制器中的關(guān)系名稱是錯(cuò)誤的。通過(guò)以下代碼更新您的類別模型:
public function ten_posts()
{
return $this->hasMany(PostModel::class)->take(10);
}
然后使用以下代碼更新您的控制器:
$categories = CategoriesModel::with('ten_posts')->take(6)->get();

TA貢獻(xiàn)1820條經(jīng)驗(yàn) 獲得超3個(gè)贊
嘗試這樣 -
$categories = CategoriesModel::with(['pages' => function($query) {
$query->take('10');
}])->take("6")->get();
- 4 回答
- 0 關(guān)注
- 307 瀏覽
添加回答
舉報(bào)