Laravel 中获取上一篇和下一篇数据

 更新时间:2015年07月27日 09:03:17   投稿:hebedich  
这篇文章主要介绍了Laravel 中获取上一篇和下一篇数据的相关资料,需要的朋友可以参考下

首先文章的起源来与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>

处理文章的前一篇和后一篇的解决方案已完成。

以上所述就是本文的全部内容了,希望大家能够喜欢。

相关文章

  • thinkphp3.2.2实现生成多张缩略图的方法

    thinkphp3.2.2实现生成多张缩略图的方法

    这篇文章主要介绍了thinkphp3.2.2实现生成多张缩略图的方法,通过调用ThinkPHP扩展包的UploadFile类实现针对上传图片的缩略图处理,非常具有实用价值,需要的朋友可以参考下
    2014-12-12
  • thinkphp3.2实现上传图片的控制器方法

    thinkphp3.2实现上传图片的控制器方法

    这篇文章主要介绍了thinkphp3.2实现上传图片的控制器方法,结合实例形式分析了thinkPHP图片文件上传相关的文件类型判断,文件路径及相关属性操作技巧,需要的朋友可以参考下
    2016-04-04
  • PHP 使用 Trait 解决 PHP 单继承问题详解

    PHP 使用 Trait 解决 PHP 单继承问题详解

    这篇文章主要介绍了PHP 使用 Trait 解决 PHP 单继承问题,结合实例形式详细分析了PHP 使用 Trait 实现PHP单继承的相关操作技巧与注意事项,需要的朋友可以参考下
    2020-04-04
  • gd库图片下载类实现下载网页所有图片的php代码

    gd库图片下载类实现下载网页所有图片的php代码

    在前期的php教程就讲了php gd库可以实现远程图片的下载,但是那只是下载了一张图片,原理是一样的,要想下载一个网页的所有图片只要使用正则表达式进行判断,找出所有的图片url就可以进行循环下载了,我特地参照网络资源编写了gd库图片下载类!
    2012-08-08
  • php+layui数据表格实现数据分页渲染代码

    php+layui数据表格实现数据分页渲染代码

    今天小编就为大家分享一篇php+layui数据表格实现数据分页渲染代码,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-10-10
  • 用PHP生成静态HTML速度快类库

    用PHP生成静态HTML速度快类库

    用PHP生成静态HTML的代码,需要的朋友可以参考下。
    2007-03-03
  • ThinkPHP关于session的操作方法汇总

    ThinkPHP关于session的操作方法汇总

    这篇文章主要介绍了ThinkPHP关于session的操作方法,有助于读者加深对ThinkPHP操作session的认识,需要的朋友可以参考下
    2014-07-07
  • 调用WordPress函数统计文章访问量及PHP原生计数器的实现

    调用WordPress函数统计文章访问量及PHP原生计数器的实现

    这篇文章主要介绍了调用WordPress函数统计文章访问量及PHP原生计数器的实现,文中作者也提到了WordPress中的两款插件不过出于性能考虑并不推荐插件方式的实现,需要的朋友可以参考下
    2016-03-03
  • Laravel中批量赋值Mass-Assignment的真正含义详解

    Laravel中批量赋值Mass-Assignment的真正含义详解

    Laravel作为在国内国外都颇为流行的PHP框架,风格优雅,其拥有自己的一些特点,下面这篇文章主要给大家介绍了关于Laravel中批量赋值Mass-Assignment的真正含义,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧。
    2017-09-09
  • 浅谈PHP中的数据传输CURL

    浅谈PHP中的数据传输CURL

    下面小编就为大家带来一篇浅谈PHP中的数据传输CURL。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-09-09

最新评论