找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 860|回复: 0
打印 上一主题 下一主题

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

[复制链接]

2588

主题

2588

帖子

7694

积分

论坛元老

Rank: 8Rank: 8

积分
7694
跳转到指定楼层
楼主
发表于 2018-2-14 05:43:46 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

            首先文章的起源来与SF上面的一个问题:
Laravel的Eloquent ORM 怎么获取当前记录的下一条
然后,当时在答案里面简单写了一下解决方案。不过由于这个取得下一条和取得上一条的记录其实在日常的开发当中还是会经常遇到,最常见的场景可能就是取得一篇文章的上一篇文章和下一篇文章了。其实这个在Laravel的Eloquent中实现还是挺容易的,不过由于Laravel并没有直接提供给我们相应的方法,我们得使用一个小小的技巧:
取得上一篇的文章id
protected function getPrevArticleId($id)
  {
    return Article::where('id', 'max('id');
  }
$id就是当前文章的id,我们通过max()来取得比当前id小的最大值,也就是当前id的前一篇文章的id。
取得上一篇的文章id
protected function getNextArticleId($id)
  {
    return Article::where('id', '>', $id)->min('id');
  }
基本上可以说是:同理可得。这个取得下一篇文章的id其实就是一个相反的过程,理解万岁。
一旦我们取得上一篇和下一篇的文章id之后,我们就可以随心所欲了,比如:
[U]复制代码[/U] 代码如下next_article = Article::find($this->getNextArticleId($article->id));
多说两句
那如果是对于一个文章的管理来说,我们其实可以这么做:
给articles表中增加一个published_at的字段,这里可以将published_at字段设置为一个Carbon对象,然后我们在前端展示的时候就可以根据published_at来判读是否将文章展示出来。
比如说查询语句:
public function scopePublished($query)
  {
    $query->where('published_at','
//以上方法位于Article中,下面的查询我放在了ArticleController中
$articles = Article::latest('published_at')->published()...
View展示:
@if($prev_article)
上一篇 {{ $prev_article->title }}
@endif
@if($next_article && $next_article->published_at slug }}]下一篇  {{ $next_article->title }}[/url]
@endif
处理文章的前一篇和后一篇的解决方案已完成。
以上所述就是本文的全部内容了,希望大家能够喜欢。
            
            
您可能感兴趣的文章:
  • Laravel框架路由配置总结、设置技巧大全
  • 跟我学Laravel之路由
  • Laravel 4 初级教程之视图、命名空间、路由
  • ThinkPHP、ZF2、Yaf、Laravel框架路由大比拼
  • Laravel 5框架学习之路由、控制器和视图简介
  • PHP框架Laravel学习心得体会
  • 基于laravel制作APP接口(API)
  • Laravel实现构造函数自动依赖注入的方法
  • Laravel中Trait的用法实例详解
  • Laravel5.1数据库连接、创建数据库、创建model及创建控制器的方法
  • Laravel路由设定和子路由设定实例分析
            
  • 分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    用户反馈
    客户端