使用分页从两个关系(一个是通过访问器)获取记录

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 方法,该方法返回该用户的所有帖子。我认为访问器是问题所在。

以上是关于使用分页从两个关系(一个是通过访问器)获取记录的主要内容,如果未能解决你的问题,请参考以下文章

使用分页从 NSArray 创建多个 UIButton

Laravel AJAX 分页从旧数据中提取行

当页面为 1 时,Material-UI Datagrid 分页从第二页开始

Codeigniter 分页从不同页面和不同员工的不同活动链接开始,而代码相同

11.分页技术

ios,获取两个成员变量中的任何一个的访问器?