我有两个表,users
和profiles
,一个用户有一个配置文件,一个用户也有推荐人,推荐人由用户表中的列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示例,所以我无法访问任何链接来移动页面。
1条答案
按热度按时间toe950271#
通过单独操作使其发挥作用: