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 相关文章推荐
一个分页的论坛
Oct 09 PHP
php分页函数示例代码分享
Feb 24 PHP
PHP使用CURL_MULTI实现多线程采集的例子
Jul 29 PHP
php中Array2xml类实现数组转化成XML实例
Dec 08 PHP
解决phpcms更换javascript的幻灯片代码调用图片问题
Dec 26 PHP
php判断用户是否手机访问代码
Jun 08 PHP
PHP实现简单数字分页效果
Jul 26 PHP
php 调用ffmpeg获取视频信息的简单实现
Apr 03 PHP
thinkphp ajaxfileupload实现异步上传图片的示例
Aug 28 PHP
yii2实现Ueditor百度编辑器的示例代码
Nov 02 PHP
Yaf框架封装的MySQL数据库操作示例
Mar 06 PHP
php链式操作的实现方式分析
Aug 12 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 addslashes和mysql_real_escape_string
2010/01/24 PHP
PHP最常用的ini函数分析 针对PHP.ini配置文件
2010/04/22 PHP
smarty中英文多编码字符截取乱码问题解决方法
2014/10/28 PHP
PHP中使用虚代理实现延迟加载技术
2014/11/05 PHP
学习php设计模式 php实现单例模式(singleton)
2015/12/07 PHP
php实现xml与json之间的相互转换功能实例
2016/07/07 PHP
PHP后门隐藏的一些技巧总结
2020/11/04 PHP
node.js不得不说的12点内容
2014/07/14 Javascript
jquery使用hide方法隐藏指定id的元素
2015/03/30 Javascript
举例讲解Node.js中的Writable对象
2015/07/29 Javascript
JavaScript提升性能的常用技巧总结【经典】
2016/06/20 Javascript
完美解决IE不支持Data.parse()的问题
2016/11/24 Javascript
js实现彩色条纹滚动条效果
2017/03/15 Javascript
JavaScript 值类型和引用类型的初次研究(推荐)
2017/07/19 Javascript
Express的HTTP重定向到HTTPS的方法
2018/06/06 Javascript
详解nuxt路由鉴权(express模板)
2018/11/21 Javascript
详解JavaScript之ES5的继承
2020/07/08 Javascript
[43:49]LGD vs CHAOS 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
python解析文件示例
2014/01/23 Python
tensorflow实现加载mnist数据集
2018/09/08 Python
python3.6.3转化为win-exe文件发布的方法
2018/10/31 Python
python获取微信企业号打卡数据并生成windows计划任务
2019/04/30 Python
Python3的高阶函数map,reduce,filter的示例详解
2019/07/23 Python
关于Python turtle库使用时坐标的确定方法
2020/03/19 Python
基于OpenCV的网络实时视频流传输的实现
2020/11/15 Python
python 实时调取摄像头的示例代码
2020/11/25 Python
python中@contextmanager实例用法
2021/02/07 Python
IE矩阵Matrix滤镜旋转与缩放及如何结合transform
2012/11/29 HTML / CSS
SkinCeuticals官网:美国药妆品牌
2018/04/19 全球购物
《春到梅花山》教学反思
2014/04/16 职场文书
最常使用的求职信
2014/05/25 职场文书
应届毕业生求职简历自我评价
2015/03/02 职场文书
2014年终个人总结报告
2015/03/09 职场文书
学长教您写论文:经验总结
2019/07/09 职场文书
Django分页器的用法你都了解吗
2021/05/26 Python
使用nginx配置访问wgcloud的方法
2021/06/26 Servers