如何解决使用分页从两个关系一个通过访问器获取记录
Laravel 7.x
我需要从两个relations
获得帖子。看:
用户有帖子;
用户有好友(访问者);
朋友有帖子;
如何获得所有(用户)自己的帖子以及每个朋友的所有帖子,并分页?
哪种方法最好?
仅用于表达我想说的想法:
$user = User::find(1);
$posts = $user->with('posts','friends.posts')->paginate(15); // I wanna get only the Posts collection
解决方法
我建议查询您的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);
,
您可以使用 hasManyThrough ,这种关系有点复杂,难以理解提供访问另一模式关系数据的快捷方式。
在您的用户模型中,按以下方式建立关系:
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...
);
}
现在您可以像这样从posts
模型中获取所有User
:
$user = User::find(1);
$posts = $user->with('posts')->paginate(15);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。