17611538698
webmaster@21cto.com

Laravel 框架获得上一条和下一条文章

资讯 0 3413 2020-10-16 10:39:43

在做开发时,一个常见任务就是显示上一条文章以及下一条文章的链接。在查看某篇文章或博客时,显示上一条和下一条,方便用户阅读。

在PHP的其它框架中取得上下文章中,使用类似如下代码:    

public function get_previous_article_by_id($post_id)
{
    $result = $this->fetch_row('article', 'id = (SELECT MAX(id) FROM aws_article WHERE id < '.$post_id.')');
    unset($result['message']);
    return $result;
}

public function get_next_article_by_id($post_id)
{
    $result = $this->fetch_row('article', 'id = (SELECT MIN(id) FROM '.'aws_article'.' WHERE id > '.$post_id.')');
    unset($result['message']);
    return $result;
}

本文讨论如何在Laravel框架中编写。

从数据库中获取一条记录:

$post = Post::where('slug', $slug)->firstOrFail();

现在我们获取到了数据库记录。然后获取当前文章的上一条记录,即记录中id小于当前顺序存储id的降序排列,然后使用first()取回单条记录,也可以使用select()限制返回的数据。

$previous = Post::where('id', '<', $post->id)->orderBy('id','desc')->first();

获取完毕后,可以调用其属性显示。如下代码:

//id
$previous->id
//title
$previous->title

获取下一条记录,和获取上一条记录很像。如下代码:

$next = Post::where('id', '>', $post->id)->orderBy('id')->first();

然后将$previous和$next传递给view视图。注意,在视图中显示时,要检查两个对象是否存在。如下代码示例:

从数据库中获取一条记录:

$post = Post::where('slug', $slug)->firstOrFail();

现在我们获取到了数据库记录。然后获取当前文章的上一条记录,即记录中id小于当前顺序存储id的降序排列,然后使用first()取回单条记录,也可以使用select()限制返回的数据。

$previous = Post::where('id', '<', $post->id)->orderBy('id','desc')->first();


获取后,可以调用其属性显示,如:

//id
$previous->id
//title
$previous->title

获取下一条记录,和获取上一条记录很像:

$next = Post::where('id', '>', $post->id)->orderBy('id')->first();

然后将$previous和$next传递给view视图。注意,在视图中显示时,要检查两个对象是否存在。如下代码示例:

@if(isset($next_posts->slug))
    <a href="/article/{{$next_posts->slug}}" class="next" style="font-size: 14px;">上一篇<i class="las la-chevron-circle-left"></i> {!! str_limit($next_posts->title,40) !!}</a>
@else
    <a href="javascript:void(0)" class="next" style="font-size: 14px;">上一篇<i class="las la-chevron-circle-left"></i> 没有了</a>
@endif
@if(isset($previous_posts->slug))
    <a href="/article/{{$previous_posts->slug}}" class="prev" style="font-size: 14px;float: right;">下一篇<i class="las la-chevron-circle-right"></i> {!! str_limit($previous_posts->title,40) !!}</a>
@else
    <a href="javascript:void(0)" class="next" style="font-size: 14px;">上一篇<i class="las la-chevron-circle-left"></i> 没有了</a>
@endif

评论