Laravel Eloquent:获取『上一条』/『下一条』记录 ID
我们经常会有比如在当前页显示下一篇,或者上一篇文章这样的这样的需求,你可以像下面这样:
...
public function show($id)
{
// 获取当前文章
$current = Post::find($id);
// 获取 “上一篇” 的 ID
$previousPostID = Post::where('id', '<', $id)->max('id');
// 同理,获取 “下一篇” 的 ID
$nextPostId = Post::where('id', '>', $id)->min('id');
return view('post.show', compact('current', 'previousPostID', 'nextPostId'));
}
...
然后就可以在模板里放好相应的链接了:
<a href="/post/{$previousPostID}">上一篇</a> | <a href="/post/{$nextPostId}">下一篇</a>
高认可度评论:
应该这样写才对,你这种写法会new3个对象
有时候我们并不需要单纯的ID,可能还会展示其他字段
应该这样写才对,你这种写法会new3个对象
@xingchen 用的静态方法,不会new3个对象吧,恳请指教
@xingchen 代码格式调整一下吧兄弟
这个操作666
有时候我们并不需要单纯的ID,可能还会展示其他字段
@Caral 不会
只是拿ID为啥不用参数直接运算得到还要去查库??
谢谢,狠有拥。
@Sky-Eye 1. id可能不连续 2. 可能不只是需要id :simple_smile:
感谢分享啊啊啊啊啊。。。。正好需要这个功能,自己的写的比较 low,还是你这个简单 :laughing:
我要去改进成为你的写法了。。。
6翻了
@panda-sir 好像是这么回事。
max 是聚集函数吧,不知道 orderby + limit(1) 会更快、更稳定一些呢。
@Caral 那个不是静态方法。 调用了__callStatistic 方法,new 了对象
@di-gua 是了,刚刚看了一下,确实是调用了Model的__callStatic
为什么不直接用框架自带的分页功能?
分页《Laravel 5.7 中文文档》
@Summer 我觉得上一条、下一条的最佳实践应该是用框架自带的分页功能,这样的内容放到社区wiki中会不会误导新人。
再写两个方法...或者加个参数
@徐小花 你说的是
上一页、下一页
,本帖说的是上一条、下一条
,性质不一样@Kevinvinvin 确实是我理解有问题,感谢指出
如果想要按照别的排序进行上一条,下一条,这种方式好像实现不了,有没有更完美的解决方案呢
@xingchen 这样是不是查了 3 次数据库?
post 如果数量很大是需要把所有的都查出来然后计算取 max 把?