Php 带有搜索结果参数的路由laravel
我有一个简单的事件列表,我从事件表中获取。我列出事件的视图有一个包含四个类别的侧栏。例如,我希望在单击某个类别时,访问路由“events?category=2”,并仅显示该类别中的事件 我创建了一个服务提供者,它为表提供数据库表“categories”中的类别,侧栏中的链接是Php 带有搜索结果参数的路由laravel,php,laravel,parameters,routes,Php,Laravel,Parameters,Routes,我有一个简单的事件列表,我从事件表中获取。我列出事件的视图有一个包含四个类别的侧栏。例如,我希望在单击某个类别时,访问路由“events?category=2”,并仅显示该类别中的事件 我创建了一个服务提供者,它为表提供数据库表“categories”中的类别,侧栏中的链接是 <a href="{{ route('searchByCategory', ['id' => $category->id] ) }}"> 事件控制器如下所示: public function ma
<a href="{{ route('searchByCategory', ['id' => $category->id] ) }}">
事件控制器如下所示:
public function mainList(Request $request){
$events = Event::all();
return view('pages.events', compact('events'));
}
public function searchEventByCategory(Request $request){
$events = Event::where('category',$request->query('id'));
return redirect()->route('events', compact('events'));
}
这不起作用,因为在“events”路由中调用控制器时,$events变量被重写,即使我将其作为参数传递给路由
我想不出任何办法来解决这个问题。我该怎么做呢
编辑
我在查询数据库时忘记添加get()方法,因此
$events = Event::where('category',$request->query('id'))->get();
您不应该重定向,只需返回相同的视图:
$events = Event::where('category', $request->id)->get();
return view('pages.events', compact('events'));
不要重定向到事件
路由
,而是从控制器返回视图
public function mainList(Request $request){
$events = Event::all();
return view('pages.events', compact('events'));
}
public function searchEventByCategory(Request $request){
$events = Event::where('category',$request->query('id'));
return view('pages.events', compact('events'));
}
如果要对这两个事件使用相同的/events
路由,请执行以下操作:
在侧边栏中:
<a href="{{ route('events', ['id' => $category->id] ) }}">
public function mainList(Request $request){
if($request->has('id')){
$events = Event::where('category',$request->get('id'));
} else {
$events = Event::all();
}
return view('pages.events', compact('events'));
}
这并不完全是我想要的,因为我希望通过相同的链接访问搜索结果,只使用参数。谢谢您的回复,因为我忘了将“get”方法添加到模型中。
public function mainList(Request $request){
if($request->has('id')){
$events = Event::where('category',$request->get('id'));
} else {
$events = Event::all();
}
return view('pages.events', compact('events'));
}