未定义的变量-引导分页-Laravel



我有一个控制器,它可以过滤数据库中的数据,并将其发送到我使用引导分页在多个页面上显示的视图。。。数据被列在视图上,每个Everything都很好,但问题是当我尝试转到第二页时,我得到了这个错误:Undefined variable: filtredPosts

这是控制器。

public function filter(Request $request){
$query = Post::query();
if ($request->country){
$query->where('country','=',$request->country);
}
if($request->city){
$query->where('city','=',$request->city);
}
if($request->type){
$query->where('type','=',$request->type);
}
if($request->sortby){
if ($request->sortby=='newest'){
$filtredPosts = $query->orderBy('created_at', 'desc')->paginate(9);
$sortby = 'newest';
}elseif ($request->sortby=='oldest'){
$filtredPosts = $query->orderBy('created_at', 'asc')->paginate(9);
$sortby = 'oldest';
}
}
return view('posts.postDashboard',['posts'=>$filtredPosts, 'sortby'=>$sortby, 'country'=>$request->country,'city'=>$request->city,'type'=>$request->type]);
}

只有当存在$request->sortby时,才定义变量filtredPosts。如果您的请求没有sortby密钥,则此变量将未定义。

您可以在if($request->sortby)检查之前定义变量来解决此问题:

...
$filtredPosts = $query;
if($request->sortby){
if ($request->sortby=='newest'){
$filtredPosts = $query->orderBy('created_at', 'desc')->paginate(9);
$sortby = 'newest';
}elseif ($request->sortby=='oldest'){
$filtredPosts = $query->orderBy('created_at', 'asc')->paginate(9);
$sortby = 'oldest';
}
}

此外,在您的blade视图中,您需要使用将查询字符串传递给分页

$posts->withQueryString()->links();

您没有在刀片上提供分页代码,可能是类似于:

{{ $posts->links() }}

您需要在Paginator方法上使用appends传递额外的参数,如:

{!! $posts->appends(['sortby' => $sortby, 'country' => $country, 'city' => $city])->links() !!}

Laravel7或以上版本上,您可以在您的分页器实例上调用withQueryString()方法:

{!! $posts->withQueryString()->links() !!}

最新更新