如何解决如何在Laravel中使用Slug获取下一个和上一个记录
我正在尝试获取项目中的上一个和下一个记录(如博客文章)。我无法获取与每个项目的相关的ID。
我可以在我的projectController中的同一查询中这样做吗?
我可以分配并获取每个项目的标题,这些标题是根据标题创建的。
::ProjectController
public function single($slug){
$project = Project::with('tools','categories')->where('slug',$slug)->firstOrFail();
$prev = Project::where('id','<',$project->id)->orderBy('id','desc')->first();
$next = Project::where('id','>',$project->id)->orderBy('id')->first();
return view('project-single',compact('project',$project))
->with('prev',$prev)
->with('next',$next);
}
::SingleProject.blade.php
@if($prev ==! null)
<a href="{{ route('project.single',['project' => $prev]) }}" class="animate">
<i class="las la-long-arrow-alt-left"></i>Anterior
</a>
@endif
::Route
Route::get('/proyectos/{slug}','ProjectController@single')->name('project.single');
解决方法
那呢:
$project = Project::with('tools','categories')->where('slug',$slug)->firstOrFail();
$more = Project::whereIn('id',[$project->id - 1,$project->id + 1])->get();
$prev = $more->where('id','<',$project->id)->first();
$next = $more->where('id','>',$project->id)->first();
,
我解决了这个问题:
::projectController
public function single($slug){
$project = Project::with('tools',$slug)->firstOrFail();
$next = Project::where('id',$project->id)->min('id');
$prev = Project::where('id',$project->id)->max('id');
return view('project-single',compact('project',$project))
->with('prev',Project::find($prev))
->with('next',Project::find($next));
}
:::view
@if($prev ==! null)
<a href="{{ route('project.single',['slug' => $prev->slug]) }}" class="animate">
<i class="las la-long-arrow-alt-left"></i>Anterior
</a>
@endif
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。