簡體   English   中英

我如何對 Laravel 的 Eloquent 關系的關系進行分頁?

[英]How can I paginate Laravel's Eloquent's relationships' relationships?

我有兩個表, usersprofiles 一個用戶有一個配置文件。 用戶也有推薦。 推薦由用戶表中的列 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.

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