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 相关文章推荐
第七节 类的静态成员 [7]
Oct 09 PHP
php session应用实例 登录验证
Mar 16 PHP
php小偷相关截取函数备忘
Nov 28 PHP
php中判断数组是一维,二维,还是多维的解决方法
May 04 PHP
解析php函数method_exists()与is_callable()的区别
Jun 21 PHP
php中apc缓存使用示例
Dec 25 PHP
非常好用的Zend Framework分页类
Jun 25 PHP
ThinkPHP中使用Ueditor富文本编辑器
Sep 02 PHP
php脚本运行时的超时机制详解
Feb 17 PHP
PHP用户注册邮件激活账户的实现代码
May 31 PHP
PHP中抽象类,接口功能、定义方法示例
Feb 26 PHP
Laravel如何同时连接多个数据库详解
Aug 13 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
php微信开发之带参数二维码的使用
2016/08/03 PHP
PHP中Laravel 关联查询返回错误id的解决方法
2017/04/01 PHP
PHP实现的各类hash算法长度及性能测试实例
2017/08/27 PHP
js下用gb2312编码解码实现方法
2009/12/31 Javascript
字符串的replace方法应用浅析
2011/12/06 Javascript
html中使用javascript调用本地程序(exe、doc等)实现代码
2013/04/26 Javascript
在javaScript中关于submit和button的区别介绍
2013/10/20 Javascript
jQuery+HTML5加入购物车代码分享
2020/10/29 Javascript
JavaScript隐式类型转换
2016/03/15 Javascript
IE下JS保存图片的简单实例
2016/07/15 Javascript
深入理解javascript中的 “this”
2017/01/17 Javascript
微信小程序 实现动态显示和隐藏某个控件
2017/04/27 Javascript
详解如何在React组件“外”使用父组件的Props
2018/01/12 Javascript
微信小程序实现验证码获取倒计时效果
2018/02/08 Javascript
vue v-model实现自定义样式多选与单选功能
2018/07/05 Javascript
详解Vue SSR( Vue2 + Koa2 + Webpack4)配置指南
2018/11/13 Javascript
vue-cli3配置与跨域处理方法
2019/08/17 Javascript
vue+element-ui表格封装tag标签使用插槽
2020/06/18 Javascript
PyQt5每天必学之进度条效果
2018/04/19 Python
将Dataframe数据转化为ndarry数据的方法
2018/06/28 Python
Python 日期时间datetime 加一天,减一天,加减一小时一分钟,加减一年
2020/04/16 Python
python 异步async库的使用说明
2020/05/04 Python
总结30个CSS3选择器
2017/04/13 HTML / CSS
canvas 下载二维码和图片加水印的方法
2018/03/21 HTML / CSS
美国独家设计师眼镜在线光学商店:Glasses Gallery
2017/12/28 全球购物
彪马英国官网:PUMA英国
2019/02/11 全球购物
Radley英国官网:英国莱德利小狗包
2019/03/21 全球购物
高中毕业自我鉴定范文
2013/10/02 职场文书
毕业生应聘幼儿园的自荐信
2013/11/20 职场文书
汽车队司机先进事迹材料
2014/02/01 职场文书
小班开学寄语
2014/04/04 职场文书
工程项目合作意向书
2015/05/08 职场文书
2016年三八红旗手先进事迹材料
2016/02/26 职场文书
基于Nginx实现限制某IP短时间访问次数
2021/03/31 Servers
千万级用户系统SQL调优实战分享
2022/03/03 MySQL
基于redis+lua进行限流的方法
2022/07/23 Redis