Laravel-URL参数之后?

时间:2018-09-19 19:07:36

标签: laravel

在Laravel中,我希望能够按ID或名称搜索用户。

我有以下路线:

Route::get('/user/{id}', 'UserController@getUserById')->name('user_by_id');

在浏览器中如下所示:

http://localhost:8000/user/1

如您所见,无法从url确定传递的值是id还是name。

所以,我要问的可能是?符号后的网址参数。

我想拥有以下网址:

http://localhost:8000/user?id=1
http://localhost:8000/user?name=hans

但是我从来没有发现有人提到这个问题。

这可能吗? 如果不是,或者不是最佳实践,如何正确处理呢?

2 个答案:

答案 0 :(得分:1)

我不知道这是否是最佳做法,但是可以实现以下目的:

public function getUserById($id)
{  
    $user = User::where('id', $id)->orWhere('name', $id)->first();

    $data['user'] = $user;

    return view('...',  $data);
}

编辑,现在我知道是索引视图了。您还可以执行以下操作:

将路线更改为:

Route::get('/user', 'UserController@getUserById')->name('user_by_id');

现在您可以使用http://...user?id=1&name=someSome之类的路线

我将更改函数名称,但这取决于您...

public function getUserById()
{
    $q = User::query();

    if($request->id){
        $q->where('id', $request->id);
    }

    if($request->name){
        $q->where('name', $request->name);
    }

    $data['users'] = $q->get();

    return view('...',  $data);
}

请注意,如果未设置任何参数,它将返回所有内容

答案 1 :(得分:1)

您可以创建一条路由,在其中获得id变量,并在id和name上都做一个where子句。

public function getUserById(Request $request, $id){
    $users = User::where('name', $id)->orWhere('id', $id')->get();
}

如果要使用url参数,还可以使用$request->input()函数。

http://localhost:8000/user?id=1&name=milo

public function getUserById(Request $request){
    $id = $request->input('id');
    $name = $request->input('name');
}