在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
但是我从来没有发现有人提到这个问题。
这可能吗? 如果不是,或者不是最佳实践,如何正确处理呢?
答案 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');
}