Laravel分页实现每页至多显示每个用户一条帖子的问题
Laravel分页查询:实现每页仅展示同一用户的一条帖子
模型与需求说明
我使用Laravel框架,Post模型结构如下:
class Post { id, title, user_id // 其他字段 }
需求:按创建时间倒序分页获取帖子,但同一页中不能出现同一用户的多条帖子,期望通过以下代码调用实现:
Post::onePostPerUser()->orderByDesc('id')->simplePaginate(5)
示例数据如下:
| id | user_id |
|---|---|
| 100 | 1 |
| 99 | 1 |
| 98 | 2 |
| 97 | 2 |
| 96 | 3 |
| 95 | 4 |
| 94 | 5 |
| 93 | 6 |
期望分页结果:
- 第1页获取帖子ID:100、98、96、95、94
- 第2页获取帖子ID:99、97……
当前实现的问题
我尝试用分区编写了查询作用域,但该实现仅对第1页有效,代码如下:
public function scopeOnePostPerUser($query) { return $query->selectRaw('*') ->fromSub(function ($query) { $query->selectRaw('*, ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY id DESC) AS rn') ->from('posts'); }, 'posts') ->where('rn', '=', 1); }
请问如何修改才能实现符合需求的分页逻辑?
内容的提问来源于stack exchange,提问作者Artur Kagaryan
相关产品推荐
相关产品推荐

