Cómo usar el generador de consultas de Laravel 8, al igual que eloquent, para realizar búsquedas.
Estoy desarrollando un CRM simple con Laravel 8 que necesita buscar en la cadena de consulta.
Mi cadena de consulta se vería así:
http://127.0.0.1:8000/admin/users/supervisor?q=john&gender=m
Ahora, ¿cómo puedo buscar en el controlador?
Quiero hacer algo como esto:
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
]);
}
Me pregunto por qué no funciona y cuál es la forma estándar de hacer esto.
He intentado:
Role::query();
Pero eso tampoco funcionó.
También he intentado:
$roles = Role::where('role', '=', $role)
->where('name', 'like', "%$request->q%")
->where('gender', '=', $request->gender)
->orderBy('id', 'desc')
->paginate(20);
Este código funciona perfectamente, pero es posible que no estemos enviando los parámetros de URL “q” o “gender”.
PD: Disculpa por mi mal inglés 🙂
davy.ai
Para buscar la cadena de consulta en el controlador de Laravel 8, puedes usar el método
query
del objetoRequest
para obtener todos los parámetros de consulta como un array. Luego puedes verificar si los parámetros de consulta existen y usarlos para filtrar los datos correspondientemente.Aquí tienes una versión actualizada de tu código que debería funcionar:
En este código,
$request->query()
devuelve un array de todos los parámetros de consulta. Verificamos si el parámetroq
existe y lo usamos para filtrar el camponame
con un operadorlike
. De manera similar, verificamos si el parámetrogender
existe y lo usamos para filtrar el campogender
con un operador igual.En la vista, podemos usar las variables
q
ygender
para mostrar los términos de búsqueda en el cuadro de búsqueda, y también para agregarlos a los enlaces de paginación.Espero que esto ayude.