使用分页从两个关系(一个是通过访问器)获取记录
Posted
技术标签:
【中文标题】使用分页从两个关系(一个是通过访问器)获取记录【英文标题】:Get records from two relations (one is pass through accessor) with paginate 【发布时间】:2020-12-06 04:50:31 【问题描述】:Laravel 7.x
我需要从两个relations
获取帖子。看:
用户有帖子;
用户有朋友(访问者);
朋友有帖子;
如何获取所有自己(用户)的帖子和每个朋友的所有帖子,并进行分页?
最好的方法是什么?
只是为了传递我想说的想法:
$user = User::find(1);
$posts = $user->with('posts','friends.posts')->paginate(15); // I wanna get only the Posts collection
【问题讨论】:
【参考方案1】:我建议查询您的Post
模型,然后为用户和相关朋友过滤器应用过滤器。
$user = User::with('friends')->find(1);
$userIds = $user->friends->pluck('id')->toArray();
array_push($userIds, $user->id);
$posts = Post::whereIn('user_id', $userIds)->paginate(15);
【讨论】:
这就是我打算这样做的方式。但我很想用雄辩的关系。无论如何,这行得通。【参考方案2】:你可以使用hasManyThrough,这个关系有点复杂,要理解一个提供快捷方式来访问另一个模式关系的数据。 在你的 User 模型中建立这样的关系:
public function posts()
return $this->hasManyThrough(
Post::class,
Friend::class,
'user_id', // Foreign key on friends table...
'friend_id', // Foreign key on posts table...
'id', // Local key on users table...
'id' // Local key on friends table...
);
现在你可以像这样从User
模型中获取所有posts
:
$user = User::find(1);
$posts = $user->with('posts')->paginate(15);
【讨论】:
所以...看看我的场景:我有一个用户模型,它代表一个用户。与另一个用户的关系是通过访问器 (getFriendsAttribute) 建立的。 $user->friends 返回我确认的朋友。朋友也是用户。 User 模型有一个 posts 方法,该方法返回该用户的所有帖子。我认为访问器是问题所在。以上是关于使用分页从两个关系(一个是通过访问器)获取记录的主要内容,如果未能解决你的问题,请参考以下文章
当页面为 1 时,Material-UI Datagrid 分页从第二页开始