我如何将Laravel's Eloquent的关系的关系分页?

7jmck4yq  于 2023-01-27  发布在  其他
关注(0)|答案(1)|浏览(148)

我有两个表,usersprofiles,一个用户有一个配置文件,一个用户也有推荐人,推荐人由用户表中的列referer_id引用,所以一个用户有一个推荐人,一个用户可以有很多推荐人。
在用户模型上定义一对一关系:

public function profile()
{
    return $this->hasOne(Profile::class);
}

在用户模型上定义反向的一对一关系:

public function referrer()
{
    return $this->belongsTo(User::class);
}

在用户模型上定义一对多关系:

public function referrals()
{
    return $this->hasMany(User::class, 'referrer_id');
}

在配置文件的模型上定义一对一或多的反向关系:

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);

将它添加到内部函数中不会执行任何操作,而将它添加到主查询中只会检索整个users表。

EDIT我已经意识到,将->paginate()添加到内部函数实际上确实限制了集合中的行数,但是任何地方都没有Paginator示例,所以我无法访问任何链接来移动页面。

toe95027

toe950271#

通过单独操作使其发挥作用:

$profile = $request->user()->profile()
    ->firstOrFail();

$referralsPaginator = $request->user()->referrals()
    ->with('profile')
    ->withCount('referrals')
    ->paginate(2);

相关问题