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 相关文章推荐
模拟flock实现文件锁定
Feb 14 PHP
《PHP编程最快明白》第四讲:日期、表单接收、session、cookie
Nov 01 PHP
关于Iframe如何跨域访问Cookie和Session的解决方法
Apr 15 PHP
PHP使用DOMDocument类生成HTML实例(包含常见标签元素)
Jun 25 PHP
php实现的简易扫雷游戏实例
Jul 09 PHP
PHP几个实用自定义函数小结
Jan 25 PHP
屏蔽PHP默认设置中的Notice警告的方法
May 20 PHP
php数据库操作model类(使用__call方法)
Nov 16 PHP
PHP递归统计系统中代码行数
Sep 19 PHP
laravel框架中表单请求类型和CSRF防护实例分析
Nov 23 PHP
php使用自带dom扩展进行元素匹配的原理解析
May 29 PHP
PHP对接阿里云虚拟号的实现(号码隐私保护)
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
SONY ICF-SW07收音机电路分析
2021/03/02 无线电
window+nginx+php环境配置 附配置搭配说明
2010/12/29 PHP
php+MySQL判断update语句是否执行成功的方法
2014/08/28 PHP
php数组实现根据某个键值将相同键值合并生成新二维数组的方法
2017/04/26 PHP
如何实现iframe(嵌入式帧)的自适应高度
2006/07/26 Javascript
JS的replace方法介绍
2012/10/20 Javascript
js用正则表达式来验证表单(比较齐全的资源)
2013/11/17 Javascript
javascript在当前窗口关闭前检测窗口是否关闭
2014/09/29 Javascript
JS使用正则表达式除去字符串中重复字符的方法
2015/11/05 Javascript
Google 地图类型详解及示例代码
2016/08/06 Javascript
JS中append字符串包含onclick无效传递参数失败的解决方案
2016/12/26 Javascript
JS中绑定事件顺序(事件冒泡与事件捕获区别)
2017/01/24 Javascript
weui框架实现上传、预览和删除图片功能代码
2017/08/24 Javascript
微信小程序实现聊天对话(文本、图片)功能
2018/07/06 Javascript
vuex + axios 做登录验证 并且保存登录状态的实例
2018/09/16 Javascript
vue获取时间戳转换为日期格式代码实例
2019/04/17 Javascript
微信小程序npm引入vant-weapp的踩坑记录
2019/08/01 Javascript
[00:48]食人魔魔法师至宝“金鹏之幸”全新模型和自定义特效展示
2019/12/19 DOTA
Python抓取框架 Scrapy的架构
2016/08/12 Python
CentOS中升级Python版本的方法详解
2017/07/10 Python
Python 将RGB图像转换为Pytho灰度图像的实例
2017/11/14 Python
python机器学习理论与实战(一)K近邻法
2021/01/28 Python
python如何读写json数据
2018/03/21 Python
Python如何发布程序的详细教程
2018/10/09 Python
python使用循环打印所有三位数水仙花数的实例
2018/11/13 Python
python 实现UTC时间加减的方法
2018/12/31 Python
python 将大文件切分为多个小文件的实例
2019/01/14 Python
DJI大疆无人机官方商城:全球领先的无人飞行器研发和生产商
2016/12/21 全球购物
限量版运动鞋和街头服饰:TheDrop
2020/09/06 全球购物
《窗前的气球》教学反思
2014/04/07 职场文书
慈善晚会策划方案
2014/05/14 职场文书
中层领导干部群众路线对照检查材料思想汇报
2014/10/02 职场文书
2015年度党员自我评价范文
2015/03/03 职场文书
JavaScript canvas实现流星特效
2021/05/20 Javascript
OpenCV-Python实现轮廓拟合
2021/06/08 Python
Python实战之OpenCV实现猫脸检测
2021/06/26 Python