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 相关文章推荐
Windows下的PHP5.0安装配制详解
Sep 05 PHP
PHP 中的一些经验积累
Oct 09 PHP
如何将数据从文本导入到mysql
Oct 09 PHP
PHP+AJAX实现无刷新注册(带用户名实时检测)
Jan 02 PHP
php读取xml实例代码
Jan 28 PHP
GBK的页面输出JSON格式的php函数
Feb 16 PHP
PHP中return 和 exit 、break和contiue 区别与用法
Apr 09 PHP
CodeIgniter配置之routes.php用法实例分析
Jan 19 PHP
yii2带搜索功能的下拉框实例详解
May 12 PHP
windows下的WAMP环境搭建图文教程(推荐)
Jul 27 PHP
Laravel框架实现的批量删除功能示例
Jan 16 PHP
php使用pthreads v3多线程实现抓取新浪新闻信息操作示例
Feb 21 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
cache_lite试用
2007/02/14 PHP
yiic命令时提示“php.exe”不是内部或外部命令的解决方法
2014/12/18 PHP
php实现的统计字数函数定义与使用示例
2017/07/26 PHP
PHP实现将base64编码字符串转换成图片示例
2018/06/22 PHP
javascript动态改变img的src属性图片不显示的解决方法
2010/10/20 Javascript
js split 的用法和定义 js split分割字符串成数组的实例代码
2012/05/13 Javascript
JS打开层/关闭层/移动层动画效果的实例代码
2013/05/11 Javascript
Javascript 函数parseInt()转换时出现bug问题
2014/05/20 Javascript
jquery实现弹出层效果实例
2015/05/19 Javascript
js带前后翻页的图片切换效果代码分享
2015/09/08 Javascript
JS实现不规则TAB选项卡效果代码
2015/09/16 Javascript
全面了解js中的script标签
2016/07/04 Javascript
浅谈angular懒加载的一些坑
2016/08/20 Javascript
Angular 2应用的8个主要构造块有哪些
2016/10/17 Javascript
jquery,js简单实现类似Angular.js双向绑定
2017/01/13 Javascript
javaScript+turn.js实现图书翻页效果实例代码
2017/02/16 Javascript
angular十大常见问题
2017/03/07 Javascript
bootstrap table实现点击翻页功能 可记录上下页选中的行
2017/09/28 Javascript
elementui的默认样式修改方法
2018/02/23 Javascript
vue 2.x 中axios 封装的get 和post方法
2018/02/28 Javascript
解决Vue 通过下表修改数组,页面不渲染的问题
2018/03/08 Javascript
js实现蒙版效果
2020/01/11 Javascript
js实现无缝轮播图插件封装
2020/07/31 Javascript
react的hooks的用法详解
2020/10/12 Javascript
python连接mongodb操作数据示例(mongodb数据库配置类)
2013/12/31 Python
进一步探究Python中的正则表达式
2015/04/28 Python
python+pandas生成指定日期和重采样的方法
2018/04/11 Python
python检索特定内容的文本文件实例
2018/06/05 Python
python Opencv计算图像相似度过程解析
2019/12/03 Python
总经理办公室主任岗位职责
2013/11/12 职场文书
五心教育心得体会
2014/09/04 职场文书
小区门卫的岗位职责
2014/09/26 职场文书
求职信格式范文
2015/03/19 职场文书
投资合作意向书范本
2015/05/08 职场文书
团组织推荐意见
2015/06/05 职场文书
再谈python_tkinter弹出对话框创建
2022/03/20 Python