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模拟asp中的XmlHttpRequest实现http请求的代码
Mar 24 PHP
str_replace只替换一次字符串的方法
Apr 09 PHP
PHP中实现生成静态文件的方法缓解服务器压力
Jan 07 PHP
destoon实现会员商铺中指定会员或会员组投放广告的方法
Aug 21 PHP
PHP生成不重复随机数的方法汇总
Nov 19 PHP
php中curl使用指南
Feb 05 PHP
PHP数组操作――获取数组最后一个值的方法
Apr 14 PHP
PHP调用Mailgun发送邮件的方法
May 04 PHP
PHP保留两位小数的几种方法
Jul 24 PHP
PHP实现的微信APP支付功能示例【基于TP5框架】
Sep 16 PHP
PHP使用PhpSpreadsheet操作Excel实例详解
Mar 26 PHP
PHP如何通过date() 函数格式化显示时间
Nov 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 curl_setopt 函数的相关应用及介绍
2013/06/17 PHP
解析php中const与define的应用区别
2013/06/18 PHP
php中filter函数验证、过滤用户输入的数据
2014/01/13 PHP
用PHP解决的一个栈的面试题
2014/07/02 PHP
php fread函数使用方法总结
2019/05/28 PHP
json跟xml的对比分析
2008/06/10 Javascript
jquery 学习之二 属性(html()与html(val))
2010/11/25 Javascript
基于jQuery架构javascript基础体系
2011/01/01 Javascript
JavaScript在XHTML中的用法详解
2013/04/11 Javascript
jquery easyui combox一些实用的小方法
2013/12/25 Javascript
javascript处理表单示例(javascript提交表单)
2014/04/28 Javascript
使用JS获取当前地理位置方法汇总
2014/12/18 Javascript
JS基于FileSystemObject创建一个指定路径的TXT文本文件
2015/08/05 Javascript
Vue.js实现一个漂亮、灵活、可复用的提示组件示例
2017/03/17 Javascript
JavaScript数据结构之广义表的定义与表示方法详解
2017/04/12 Javascript
jQuery+C#实现参数RSA加密传输功能【附jsencrypt.js下载】
2017/06/26 jQuery
Angular中使用MathJax遇到的一些问题
2017/12/15 Javascript
基于jQuery实现的设置文本区域的光标位置
2018/06/15 jQuery
微信小程序日历/日期选择插件使用方法详解
2018/12/28 Javascript
微信小程序开发之map地图组件定位并手动修改位置偏差
2019/08/17 Javascript
手把手15分钟搭一个企业级脚手架
2019/09/16 Javascript
TypeScript之调用栈的实现
2019/12/31 Javascript
python自动化测试之setUp与tearDown实例
2014/09/28 Python
Python数据类型之Dict字典实例详解
2019/05/07 Python
Python学习笔记之Zip和Enumerate用法实例分析
2019/08/14 Python
使用Python给头像戴上圣诞帽的图像操作过程解析
2019/09/20 Python
如何在scrapy中集成selenium爬取网页的方法
2020/11/18 Python
基于Pytorch版yolov5的滑块验证码破解思路详解
2021/02/25 Python
结合CSS3的新特性来总结垂直居中的实现方法
2016/05/30 HTML / CSS
HTML5 Canvas实现平移/放缩/旋转deom示例(附截图)
2013/07/04 HTML / CSS
英国最大的纸工艺品商店:CraftStash
2018/12/01 全球购物
酒店开业策划方案
2014/06/02 职场文书
升学宴答谢词
2015/01/05 职场文书
一年级语文下册复习计划
2015/01/17 职场文书
财务工作失误检讨书
2015/02/19 职场文书
2016年世界人口日宣传活动总结
2016/04/05 职场文书