我正在使用 Laravel 8 開發一個簡單的 crm,它需要在 url 字串中進行搜索。我的查詢字串如下所示:
http://127.0.0.1:8000/admin/users/supervisor?q=john&gender=m
現在的問題是如何在控制器中搜索?我想這樣做:
public function index (Request $request)
{
$role = getRoleCode($request->role);
$roles = Role::where('role', '=', $role);
if ($request->q) {
$roles->where('name', 'like', "%$request->$q%");
}
if ($request->gender) {
$roles->where('gender', '=', $request->gender);
}
$role->orderBy('id', 'desc')->paginate(20);
return view('admin.users.index', [
'roles' => $roles,
'role_name' => config('settings.roles')[$role],
'role_en_name' => $request->role,
'q' => $request->q,
'gender' => $request->gender
]);
}
我想知道為什么它不起作用以及執行此操作的標準方法是什么。
我試過了:
Role::query();
但也沒有用。我也試過:
$roles = Role::where('role', '=', $role)
->where('name', 'like', "%$request->$q%")
->where('gender', '=', $request->gender)
->orderBy('id', 'desc')
->paginate(20);
此代碼完美運行,但我們可能不會發送“q”或“gender”網址引數。ps:對不起我的英語不好:)
uj5u.com熱心網友回復:
如果你想有條件地將where陳述句添加到你的查詢中,你可以使用if你正在嘗試做的陳述句或使用whenEloquent/Query Builder 的方法:
$roles = Role::where('role', $role)
->when($request->input('q'), fn ($query, $search) => $query->where('name', 'like', '%'. $search .'%'))
->when($request->input('gender'), fn ($query, $gender) => $query->where('gender', $gender))
->orderBy('id', 'DESC')
->paginate(20);
Laravel 8.x 檔案 - 查詢 - 條件子句 when
uj5u.com熱心網友回復:
使用 when() 更好
->when(true, function($query){$query->where('x', x);})
uj5u.com熱心網友回復:
Mohamed 先生 $roles 而不是 $role 有錯誤
//$roles->orderBy('id', 'desc')->paginate(20)...
uj5u.com熱心網友回復:
你的路線應該是這樣的:
Route::get('/admin/users/{role}', [YourController::class, 'index']);
您的索引函式將是這樣的:
public function index (Request $request,$role)
{
//old line $role = getRoleCode($request->role);
$role = getRoleCode($role);
//...Your code
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/384614.html
下一篇:查詢生成器Laravel左連接
