带有搜索结果参数的路径laravel

时间:2017-04-11 11:02:35

标签: php laravel parameters routes

我有一个简单的事件列表,我从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();

2 个答案:

答案 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'));
}