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实现验证码功能
Oct 09 PHP
PHP文本操作类
Nov 25 PHP
php 全局变量范围分析
Aug 07 PHP
php上的memcache和memcached两个pecl库
Mar 29 PHP
收集的二十一个实用便利的PHP函数代码
Apr 22 PHP
使用php统计字符串中中英文字符的个数
Jun 23 PHP
腾讯微博提示missing parameter errorcode 102 错误的解决方法
Dec 22 PHP
php基于CodeIgniter实现图片上传、剪切功能
May 14 PHP
最新最全PHP生成制作验证码代码详解(推荐)
Jun 12 PHP
Yii编程开发常见调用技巧集锦
Jul 15 PHP
php操作mongodb封装类与用法实例
Sep 01 PHP
如何用PHP实现分布算法之一致性哈希算法
May 26 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
全国FM电台频率大全 - 25 云南省
2020/03/11 无线电
PHP中Session的概念
2006/10/09 PHP
Php获取金书网的书名的实现代码
2010/06/11 PHP
微博短链接算法php版本实现代码
2012/09/15 PHP
php检测url是否存在的方法
2015/04/14 PHP
基于php实现的php代码加密解密类完整实例
2016/10/12 PHP
php取出数组单个值的方法
2018/03/12 PHP
EXTJS FORM HIDDEN TEXTFIELD 赋值 使用value不好用的问题
2011/04/16 Javascript
怎样在JavaScript里写一个swing把数据插入数据库
2012/12/10 Javascript
JS delegate与live浅析
2013/12/21 Javascript
Javascript小技巧之生成html元素
2014/05/15 Javascript
AngularJS中如何使用$parse或$eval在运行时对Scope变量赋值
2016/01/25 Javascript
Jquery Easyui对话框组件Dialog使用详解(14)
2016/12/19 Javascript
jQuery实现三级联动效果
2017/03/02 Javascript
详解Vue爬坑之vuex初识
2017/06/14 Javascript
关于使用js算总价的问题
2017/06/23 Javascript
AngularJS中filter的使用实例详解
2017/08/25 Javascript
VUE Error: getaddrinfo ENOTFOUND localhost
2018/05/03 Javascript
使用jquery DataTable和ajax向页面显示数据列表的方法
2018/08/09 jQuery
微信小程序网络层封装的实现(promise, 登录锁)
2019/05/08 Javascript
Vuex的热更替如何实现
2020/06/05 Javascript
基于JavaScript实现大文件上传后端代码实例
2020/08/18 Javascript
Python删除指定目录下过期文件的2个脚本分享
2014/04/10 Python
利用Python的Django框架中的ORM建立查询API
2015/04/20 Python
python判断字符串是否是json格式方法分享
2017/11/07 Python
Python对多属性的重复数据去重实例
2018/04/18 Python
Python登录系统界面实现详解
2019/06/25 Python
Python3 全自动更新已安装的模块实现
2020/01/06 Python
Numpy 多维数据数组的实现
2020/06/18 Python
HTML5拖放效果的实现代码
2016/11/17 HTML / CSS
荷兰最大的多品牌男装连锁店:Adam Brandstore
2019/12/31 全球购物
导师鉴定意见
2015/06/05 职场文书
浅谈:电影《孔子》观后感(范文)
2019/10/14 职场文书
详解Python描述符的工作原理
2021/06/11 Python
python创建字典及相关管理操作
2022/04/13 Python
win10系统计算机图标怎么调出来?win10调出计算机图标的方法
2022/08/14 数码科技