Laravel 获取『上一条』/『下一条』记录 ID

49

我们经常会有比如在当前页显示下一篇,或者上一篇文章这样的这样的需求,你可以像下面这样:

...

public function show($id)
{
    // 获取当前文章
    $current = Post::find($id);

    // 获取 “上一篇” 的 ID
    $previousPostID = Post::where('id', '<', $id)->max('id');

    // 同理,获取 “下一篇” 的 ID
    $nextPostId = Post::where('id', '>', $id)->min('id');

    return view('post.show', compact('current', 'previousPostID', 'nextPostId'));
}
...

然后就可以在模板里放好相应的链接了:

<a href="/post/{$previousPostID}">上一篇</a> | <a href="/post/{$nextPostId}">下一篇</a>
讨论数量: 8
public function show(Post $db,$id)
{
    // 获取当前文章
    $current = $db->find($id);

    // 获取 “上一篇” 的 ID
    $previousPostID = $db->where('id', '<', $id)->max('id');

    // 同理,获取 “下一篇” 的 ID
    $nextPostId = $db->where('id', '>', $id)->min('id');

    return view('post.show', compact('current', 'previousPostID', 'nextPostId'));
}

应该这样写才对,你这种写法会new3个对象

4周前

@xingchen 用的静态方法,不会new3个对象吧,恳请指教

4周前
Handle

@xingchen 代码格式调整一下吧兄弟

4周前

这个操作666

4周前
Jade
$item['prev'] = self::query()
    ->where('id', '<', $item['id'])
    ->orderBy('id','desc')
    ->first(['id', 'title','model_id']);
$item['next'] = self::query()
    ->where('id', '>', $item['id'])
    ->orderBy('id','asc')
    ->first(['id', 'title','model_id']);

有时候我们并不需要单纯的ID,可能还会展示其他字段

3周前

@Caral 不会

3周前

只是拿ID为啥不用参数直接运算得到还要去查库??

1周前

谢谢,狠有拥。

1周前

  • 请注意单词拼写,以及中英文排版,参考此页
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`, 更多语法请见这里 Markdown 语法
  • 支持表情,使用方法请见 Emoji 自动补全来咯,可用的 Emoji 请见 :metal: :point_right: Emoji 列表 :star: :sparkles:
  • 上传图片, 支持拖拽和剪切板黏贴上传, 格式限制 - jpg, png, gif
  • 发布框支持本地存储功能,会在内容变更时保存,「提交」按钮点击时清空
  请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!