我有一个简单的事件列表,我从Events表中获取。我列出事件的视图有一个带有四个类别的侧边栏。我想在点击某个类别时访问路线“events?category = 2”,并仅显示该类别中的事件。
我创建了一个服务提供者,它提供了表格的数据库表“类别”中的类别,侧栏中的链接是
<a href="{{ route('searchByCategory', ['id' => $category->id] ) }}">
路线是
Route::get('events', 'EventsController@mainList')->name('events');
Route::get('searchEventByCategory','EventsController@searchEventByCategory')->name('searchByCategory');
EventsController如下:
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();
答案 0 :(得分:1)
您不应该重定向,只需返回相同的视图:
$events = Event::where('category', $request->id)->get();
return view('pages.events', compact('events'));
答案 1 :(得分:1)
不是重定向到事件route
,而是从控制器返回view
。
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'));
}