4 回答

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

TA貢獻1806條經驗 獲得超5個贊
對于急切加載,您可以使用地圖操作執行以下操作:
$categories = CategoriesModel::with('pages')->take(6)->get()
->map(function($q)
{ $q->pages = $q->pages->take(10); // take only 10 query
return $q;
}
);
上述方法之所以必要,是因為受約束的預加載查詢大致可轉換為 SQL,如下所示:
查詢選擇類別:
select * from `categories`
limit 6;
查詢以獲取關系
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貢獻1772條經驗 獲得超6個贊
首先,您的控制器中的關系名稱是錯誤的。通過以下代碼更新您的類別模型:
public function ten_posts()
{
return $this->hasMany(PostModel::class)->take(10);
}
然后使用以下代碼更新您的控制器:
$categories = CategoriesModel::with('ten_posts')->take(6)->get();

TA貢獻1820條經驗 獲得超2個贊
嘗試這樣 -
$categories = CategoriesModel::with(['pages' => function($query) {
$query->take('10');
}])->take("6")->get();
- 4 回答
- 0 關注
- 292 瀏覽
添加回答
舉報