最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Laravel Eloquent取上一条和下一条数据的id实现讲解
时间:2026-09-23 10:20:01 编辑:袖梨 来源:一聚教程网
起源
首先文章的起源来于一个问题:
Laravel的Eloquent ORM 怎么获取当前记录的下一条
我想获取下一条把它的active字段更改为yes,但是这样貌似获取不到
$next_active = $ips->where("id", ">", $ips_get->id)->first();$next_active->update(["active" => "yes"]);然后,当时在答案里面简单写了一下解决方案。不过由于这个取得下一条和取得上一条的记录其实在日常的开发当中还是会经常遇到,最常见的场景可能就是取得一篇文章的上一篇文章和下一篇文章了。其实这个在Laravel的Eloquent中实现还是挺容易的,不过由于Laravel并没有直接提供给我们相应的方法,我们得使用一个小小的技巧:
取得上一篇的文章id
protected function getPrevArticleId($id){return Article::where('id', '<', $id)->max('id');}$id就是当前文章的id,我们通过max()来取得比当前id小的最大值,也就是当前id的前一篇文章的id。
取得下一篇的文章id
protected function getNextArticleId($id){return Article::where('id', '>', $id)->min('id');}基本上可以说是:同理可得。这个取得下一篇文章的id其实就是一个相反的过程,理解万岁。
一旦我们取得上一篇和下一篇的文章id之后,我们就可以随心所欲了,比如:
$next_article = Article::find($this->getNextArticleId($article->id));
多说两句
那如果是对于一个文章的管理来说,我们其实可以这么做:
给articles表中增加一个published_at的字段,这里可以将published_at字段设置为一个Carbon对象,然后我们在前端展示的时候就可以根据published_at来判读是否将文章展示出来。
比如说查询语句:
public function scopePublished($query){$query->where('published_at','<=',Carbon::now());}//以上方法位于Article中,下面的查询我放在了ArticleController中$articles = Article::latest('published_at')->published()...View展示
<li class="previous">@if($prev_article)<a href="/post/{{ $prev_article->slug }}" rel="external nofollow"rel="prev"><i class="fa fa-chevron-left"></i><strong>上一篇</strong><span>{{ $prev_article->title }}</span> </a>@endif</li><li class="next">@if($next_article && $next_article->published_at < CarbonCarbon::now())<a href="/post/{{ $next_article->slug }}" rel="external nofollow"rel="next"><i class="fa fa-chevron-right"></i><strong>下一篇</strong> <span>{{ $next_article->title }}</span></a>@endif</li>处理文章的前一篇和后一篇的解决方案已完成。
相关文章
- thinkphp使用url请求调用ThinkApi天气教程【图文详解】 09-23
- ThinkPHP6使用JWT+中间件实现Token验证实例详解 09-23
- Thinkphp6配置并使用redis图文详解 09-23
- PHP应用代码复杂度检测使用方法 09-23
- php代码审计之ThinkPHP5的文件包含漏洞详解 09-23
- PHP利用redis位图实现简单的签到功能 09-23