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 相关文章推荐
WinXP + Apache +PHP5 + MySQL + phpMyAdmin安装全功略
Jul 09 PHP
一个PHP+MSSQL分页的例子
Oct 09 PHP
Win2003下APACHE+PHP5+MYSQL4+PHPMYADMIN 的简易安装配置
Nov 18 PHP
PHP Session_Regenerate_ID函数双释放内存破坏漏洞
Jan 27 PHP
PHP改进计算字符串相似度的函数similar_text()、levenshtein()
Oct 27 PHP
php之curl设置超时实例
Nov 03 PHP
php实现的简易扫雷游戏实例
Jul 09 PHP
PHP扩展开发教程(总结)
Nov 04 PHP
Yii视图CGridView实现操作按钮定义地址示例
Jul 14 PHP
PHP中SERIALIZE和JSON的序列化与反序列化操作区别分析
Oct 11 PHP
PHP5.6新增加的可变函数参数用法分析
Aug 25 PHP
PHP+百度AI OCR文字识别实现了图片的文字识别功能
May 08 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
Laravel访问出错提示:`Warning: require(/vendor/autoload.php): failed to open stream: No such file or di解决方法
2019/04/02 PHP
求数组最大最小值方法适用于任何数组
2013/08/16 Javascript
js交换排序 冒泡排序算法(Javascript版)
2014/10/04 Javascript
Node.js的特点和应用场景介绍
2014/11/04 Javascript
jQuery替换textarea中换行的方法
2015/06/10 Javascript
AngularJS 使用$sce控制代码安全检查
2016/01/05 Javascript
js+html5操作sqlite数据库的方法
2016/02/02 Javascript
js随机生成26个大小写字母
2016/02/12 Javascript
高效Web开发的10个jQuery代码片段
2016/07/22 Javascript
jQuery实现动态控制页面元素的方法分析
2017/12/20 jQuery
Angularjs实现多图片上传预览功能
2018/07/18 Javascript
layer弹出层全屏及关闭方法
2018/08/17 Javascript
微信小程序 可搜索的地址选择实现详解
2019/08/28 Javascript
vue组件 keep-alive 和 transition 使用详解
2019/10/11 Javascript
vue封装可复用组件confirm,并绑定在vue原型上的示例
2019/10/31 Javascript
js最全的数组的降维5种办法(小结)
2020/04/28 Javascript
TypeScript 引用资源文件后提示找不到的异常处理技巧
2020/07/15 Javascript
Python实现抓取网页并且解析的实例
2014/09/20 Python
在Python下利用OpenCV来旋转图像的教程
2015/04/16 Python
用python简单实现mysql数据同步到ElasticSearch的教程
2018/05/30 Python
python 给DataFrame增加index行名和columns列名的实现方法
2018/06/08 Python
Django项目开发中cookies和session的常用操作分析
2018/07/03 Python
Django安装配置mysql的方法步骤
2018/10/15 Python
解决python字典对值(值为列表)赋值出现重复的问题
2019/01/20 Python
Django实现简单网页弹出警告代码
2019/11/15 Python
Matplotlib绘制雷达图和三维图的示例代码
2020/01/07 Python
Python通过TensorFLow进行线性模型训练原理与实现方法详解
2020/01/15 Python
解决Python 函数声明先后顺序出现的问题
2020/09/02 Python
美国一家主营日韩美妆护肤品的在线商店:iMomoko
2016/09/11 全球购物
数据库设计的包括哪两种,请分别进行说明
2016/07/15 面试题
物业经理求职自我评价
2013/09/22 职场文书
出生医学证明样本
2014/01/17 职场文书
红领巾广播站广播稿(3篇)
2014/09/20 职场文书
夫妻双方自愿离婚协议书怎么写
2014/12/01 职场文书
军事博物馆观后感
2015/06/05 职场文书
结婚幸福感言
2015/08/01 职场文书