【发布时间】:2022-01-20 15:09:53
【问题描述】:
我正在使用 Laravel 8 开发一个简单的 CRM,需要在查询字符串中进行搜索。
我的查询字符串如下所示:
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:对不起我的英语不好:)
【问题讨论】:
-
您没有将调用结果保存到返回结果的
paginate,您正在将构建器传递给您的视图,而不是查询的结果......而且您似乎是在您的代码中混淆$role和$roles...虽然我猜这似乎是“伪代码”? -
如果你要基于条件链接一个查询,我发现你的查询命名不同于结果有很大帮助,比如
$query = Role::where('role', $role);,然后在每个if语句中:@987654330 @,完成后,$results = $query->latest('id')->paginate(20);。这样一来,$query和$result就截然不同了。$role和$roles,带有方法链接等可能(并且是)导致一些混乱。
标签: php laravel search eloquent query-string