我使用Laravel,我有一个Post模型。
class Post {
id,
title,
user_id
...
}
字符串
我的目标是通过分页来获取最新创建的帖子。但我不想在一个页面上获得同一个用户的两个帖子。
Post::onePostPerUser()->orderByDesc('id')->simplePaginate(5)
型
例如,当页面为1时,我想获得帖子(100,98,96,95,94)。在下一页(99,97,.....)
| ID|用户标识|
| --|--|
| 100 | 1 |
| 99 | 1 |
| 98 | 2 |
| 97 | 2 |
| 96 | 3 |
| 95 | 4 |
| 94 | 5 |
| 93 | 6 |
我试过使用分区写作用域,但它只对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);
}
型
1条答案
按热度按时间knsnq2tg1#
你不需要任何作用域,只需要user group by和latest方法。
字符串