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获取远程图片的两种 CURL方式和sockets方式获取远程图片
Nov 07 PHP
PHP乱码问题,UTF-8乱码常见问题小结
Apr 09 PHP
说说PHP的autoLoad自动加载机制
Sep 27 PHP
php 获取SWF动画截图示例代码
Feb 10 PHP
php使用fgetcsv读取csv文件出现乱码的解决方法
Nov 08 PHP
PHP将session信息存储到数据库的类实例
Mar 04 PHP
php判断邮箱地址是否存在的方法
Feb 13 PHP
php+redis实现注册、删除、编辑、分页、登录、关注等功能示例
Feb 15 PHP
php redis实现文章发布系统(用户投票系统)
Mar 04 PHP
ThinkPHP5+Layui实现图片上传加预览功能
Aug 17 PHP
laravel 如何实现引入自己的函数或类库
Oct 15 PHP
Laravel框架使用技巧之使用url()全局函数返回前一个页面的地址方法详解
Apr 06 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
WHOIS类的修改版
2006/10/09 PHP
php 使用array函数实现分页
2015/02/13 PHP
php实现递归的三种基本方式
2020/07/04 PHP
Yii快速入门经典教程
2015/12/28 PHP
php实用代码片段整理
2016/11/12 PHP
PHP+原生态ajax实现的省市联动功能详解
2017/08/15 PHP
浅谈Javascript事件模拟
2012/06/27 Javascript
JQuery切换显示的效果实例代码
2013/02/27 Javascript
常规表格多表头查询示例
2014/02/21 Javascript
js实现鼠标感应向下滑动隐藏菜单的方法
2015/02/20 Javascript
js实现简单选项卡与自动切换效果的方法
2015/04/10 Javascript
值得分享的轻量级Bootstrap Table表格插件
2016/05/30 Javascript
JavaScript高阶函数_动力节点Java学院整理
2017/06/28 Javascript
Angular2+国际化方案(ngx-translate)的示例代码
2017/08/23 Javascript
Three.js入门之hello world以及如何绘制线
2017/09/25 Javascript
分享ES6的7个实用技巧
2018/01/18 Javascript
vue展示dicom文件医疗系统的实现代码
2018/08/27 Javascript
对vuex中getters计算过滤操作详解
2019/11/06 Javascript
elementUI同一页面展示多个Dialog的实现
2020/11/19 Javascript
替换python字典中的key值方法
2018/07/06 Python
python+numpy实现的基本矩阵操作示例
2019/07/19 Python
Python调用graphviz绘制结构化图形网络示例
2019/11/22 Python
Python 之 Json序列化嵌套类方式
2020/02/27 Python
python实现五子棋程序
2020/04/24 Python
Python ckeditor富文本编辑器代码实例解析
2020/06/22 Python
css3 给背景设置渐变色的方法
2019/09/12 HTML / CSS
HTML5实现的图片无限加载的瀑布流效果另带边框圆角阴影
2014/03/07 HTML / CSS
Opodo意大利:欧洲市场上领先的在线旅行社
2019/10/24 全球购物
写出SQL四条最基本的数据操作语句(DML)
2012/12/12 面试题
仓库理货员岗位职责
2013/12/18 职场文书
英文求职信写作小建议
2014/02/16 职场文书
2014年人大工作总结
2014/12/10 职场文书
导游欢送词
2015/01/31 职场文书
银行稽核岗位职责
2015/04/13 职场文书
2015年电厂工作总结范文
2015/05/13 职场文书
六年级作文之关于梦
2019/10/22 职场文书