Laravel 中获取上一篇和下一篇数据


Posted in PHP onJuly 27, 2015

首先文章的起源来与SF上面的一个问题:

Laravel的Eloquent ORM 怎么获取当前记录的下一条

然后,当时在答案里面简单写了一下解决方案。不过由于这个取得下一条和取得上一条的记录其实在日常的开发当中还是会经常遇到,最常见的场景可能就是取得一篇文章的上一篇文章和下一篇文章了。其实这个在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="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 < Carbon\Carbon::now())

<a href="/post/{{ $next_article->slug }}" rel="next"><i class="fa fa-chevron-right"></i><strong>下一篇</strong> <span> {{ $next_article->title }}</span></a>
@endif
</li>

处理文章的前一篇和后一篇的解决方案已完成。

以上所述就是本文的全部内容了,希望大家能够喜欢。

PHP 相关文章推荐
PHP 解决utf-8和gb2312编码转换问题
Mar 18 PHP
phpExcel中文帮助手册之常用功能指南
Aug 18 PHP
利用Fix Rss Feeds插件修复WordPress的Feed显示错误
Dec 19 PHP
php支持断点续传、分块下载的类
May 02 PHP
PHP MYSQL简易交互式站点开发
Dec 27 PHP
基于thinkPHP类的插入数据库操作功能示例
Jan 06 PHP
php检查函数必传参数是否存在的实例详解
Aug 28 PHP
PHP实现的简单sha1加密功能示例
Aug 27 PHP
PHP生成指定范围内的N个不重复的随机数
Mar 18 PHP
php基于协程实现异步的方法分析
Jul 17 PHP
PhpStorm 如何优雅的调试Hyperf的方法步骤
Nov 24 PHP
thinkphp诸多限制条件下如何getshell详解
Dec 09 PHP
php实现将Session写入数据库
Jul 26 #PHP
php检测文本的编码
Jul 26 #PHP
PHP中COOKIES使用示例
Jul 26 #PHP
PHP实现简单数字分页效果
Jul 26 #PHP
FastCGI 进程意外退出造成500错误
Jul 26 #PHP
php实现QQ空间获取当前用户的用户名并生成图片
Jul 25 #PHP
使用纯php代码实现页面伪静态的方法
Jul 25 #PHP
You might like
《魔兽世界》惊魂幻象将获得调整
2020/03/08 其他游戏
php存储过程调用实例代码
2013/02/03 PHP
一文看懂PHP进程管理器php-fpm
2020/06/01 PHP
IE和Mozilla的兼容性汇总event
2007/08/12 Javascript
Javascript 通过json自动生成Dom的代码
2010/04/01 Javascript
Raphael一个用于在网页中绘制矢量图形的Javascript库
2013/01/08 Javascript
用JS做的简单的可折叠的两级树形菜单
2013/09/21 Javascript
基于javascript滚动图片具体实现
2013/11/18 Javascript
深入理解javascript中return的作用
2013/12/30 Javascript
JSON取值前判断
2014/12/23 Javascript
详谈LABJS按需动态加载js文件
2015/05/07 Javascript
简述Matlab中size()函数的用法
2016/03/20 Javascript
详解vue-cli中配置sass
2017/06/21 Javascript
javascript实现循环广告条效果
2017/12/12 Javascript
JavaScript ES 模块的使用
2020/11/12 Javascript
[06:24]DOTA2亚洲邀请赛小组赛第三日 TOP10精彩集锦
2015/02/01 DOTA
[59:44]2018DOTA2亚洲邀请赛 3.31 小组赛 B组 paiN vs iG
2018/03/31 DOTA
[53:43]VP vs NewBee Supermajor 胜者组 BO3 第三场 6.5
2018/06/06 DOTA
python迭代器的使用方法实例
2013/11/21 Python
Python使用字典的嵌套功能详解
2019/02/27 Python
python覆盖写入,追加写入的实例
2019/06/26 Python
用Anaconda安装本地python包的方法及路径问题(图文)
2019/07/16 Python
用Cython加速Python到“起飞”(推荐)
2019/08/01 Python
解决selenium+Headless Chrome实现不弹出浏览器自动化登录的问题
2021/01/09 Python
HTML5+WebSocket实现多文件同时上传的实例
2016/12/29 HTML / CSS
全天然狗零食:Best Bully Sticks
2016/09/22 全球购物
澳大利亚排名第一的狂热牛仔品牌:ONETEASPOON
2018/11/20 全球购物
英国时尚配饰、珠宝和服装网站:KJ Beckett
2020/01/23 全球购物
应届生简历中的自我评价
2014/01/13 职场文书
绿色学校实施方案
2014/03/31 职场文书
甜品店创业计划书
2014/09/21 职场文书
2015年农村党员干部主题教育活动总结
2015/03/25 职场文书
2015年保险公司内勤工作总结
2015/05/23 职场文书
学会掌握自己命运的十条黄金法则:
2019/08/08 职场文书
Vue elementUI表单嵌套表格并对每行进行校验详解
2022/02/18 Vue.js
如何Python使用re模块实现okenizer
2022/04/30 Python