[英]How can I paginate Laravel's Eloquent's relationships' relationships?
我有兩個表, users
和profiles
。 一個用戶有一個配置文件。 用戶也有推薦。 推薦由用戶表中的列 referrer_id 引用。 所以一個用戶有一個推薦人,一個用戶可以有很多推薦人。
在 User 的 Model 上定義一對一的關系:
public function profile()
{
return $this->hasOne(Profile::class);
}
在 User 的 Model 上定義反向一對一關系:
public function referrer()
{
return $this->belongsTo(User::class);
}
在 User 的 Model 上定義一對多關系:
public function referrals()
{
return $this->hasMany(User::class, 'referrer_id');
}
在配置文件的 Model 上定義反向一對一或多關系:
public function user()
{
return $this->belongsTo(User::class);
}
我希望檢索用戶的個人資料、用戶的推薦人及其個人資料、推薦人的推薦人以及每個推薦人的推薦人的計數。
以下 Eloquent 查詢有效,但不分頁:
namespace App\Http\Controllers;
class ReferralsController extends Controller
{
public function index(Request $request)
{
return $request->user()->loadMissing(['profile', 'referrals' => function ($query) {
$query->with(['profile', 'referrals'])->withCount('referrals');
}]);
}
}
我試圖將->paginate()
添加到查詢中(如下所示以及一個或另一個),但它不起作用:
return $request->user()->loadMissing(['profile', 'referrals' => function ($query) {
$query->with(['profile', 'referrals'])->withCount('referrals')->paginate(2);
}])->paginate(2);
將它添加到內部 function 不會執行任何操作,將它添加到主查詢只會檢索整個users
表。
編輯我已經意識到將->paginate()
添加到內部 function 實際上確實限制了集合中的行數,但是任何地方都沒有 Paginator 實例,所以我無法訪問任何移動頁面的鏈接.
通過單獨執行它來使其工作:
$profile = $request->user()->profile()
->firstOrFail();
$referralsPaginator = $request->user()->referrals()
->with('profile')
->withCount('referrals')
->paginate(2);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.