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 array_flip() 删除数组重复元素
Jan 14 PHP
关于页面优化和伪静态
Oct 11 PHP
PHP ? EasyUI DataGrid 资料取的方式介绍
Nov 07 PHP
怎样给PHP源代码加密?PHP二进制加密与解密的解决办法
Apr 22 PHP
php检查字符串中是否有外链的方法
Jul 29 PHP
php实现微信公众号主动推送消息
Dec 31 PHP
ThinkPHP中limit()使用方法详解
Apr 19 PHP
PHP7匿名类用法分析
Sep 26 PHP
微信自定义分享php代码分析
Nov 24 PHP
PHP生成各种随机验证码的方法总结【附demo源码】
Jun 05 PHP
详解php中serialize()和unserialize()函数
Jul 08 PHP
PHP设计模式(八)装饰器模式Decorator实例详解【结构型】
May 02 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
2006/12/23 PHP
PHP 字符串编码截取函数(兼容utf-8和gb2312)
2009/05/02 PHP
PHP改进计算字符串相似度的函数similar_text()、levenshtein()
2014/10/27 PHP
PHP和C#可共用的可逆加密算法详解
2015/10/26 PHP
PHP文件上传之多文件上传的实现思路
2016/01/27 PHP
PHP的Yii框架中使用数据库的配置和SQL操作实例教程
2016/03/17 PHP
PHP+iframe图片上传实现即时刷新效果
2016/11/18 PHP
PHP 文件上传后端处理实用技巧方法
2017/01/06 PHP
jquery表格内容筛选实现思路及代码
2013/04/16 Javascript
JS如何将数字类型转化为没3个一个逗号的金钱格式
2014/01/27 Javascript
jQuery trigger()方法用法介绍
2015/01/13 Javascript
辨析JavaScript中的Undefined类型与null类型
2016/05/26 Javascript
js不间断滚动的简单实现
2016/06/03 Javascript
基于jQuery实现的幻灯图片切换
2016/12/02 Javascript
JavaScript BASE64算法实现(完美解决中文乱码)
2017/01/10 Javascript
jQuery实现的表格前端排序功能示例
2017/09/18 jQuery
浅析Angular 实现一个repeat指令的方法
2019/07/21 Javascript
vue 点击其他区域关闭自定义div操作
2020/07/17 Javascript
python数据结构树和二叉树简介
2014/04/29 Python
python机器学习库常用汇总
2017/11/15 Python
Django代码性能优化与Pycharm Profile使用详解
2018/08/26 Python
python 字符串只保留汉字的方法
2018/11/16 Python
python-django中的APPEND_SLASH实现方法
2019/06/21 Python
Python pip替换为阿里源的方法步骤
2019/07/02 Python
Python标准库json模块和pickle模块使用详解
2020/03/10 Python
浅谈keras中的目标函数和优化函数MSE用法
2020/06/10 Python
Python实现自动签到脚本功能
2020/08/20 Python
css3 clip实现圆环进度条的示例代码
2018/02/07 HTML / CSS
简单html5代码获取地理位置
2014/03/31 HTML / CSS
维也纳通行证:Vienna PASS
2019/07/18 全球购物
英文请假条
2014/04/11 职场文书
html+css实现赛博朋克风格按钮
2021/05/26 HTML / CSS
VUE使用draggable实现组件拖拽
2022/04/06 Vue.js
微信小程序调用python模型
2022/04/21 Python
python神经网络ResNet50模型
2022/05/06 Python
css清除浮动clearfix:after的用法详解(附完整代码)
2023/05/21 HTML / CSS