es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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 🙂

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para buscar la cadena de consulta en el controlador de Laravel 8, puedes usar el método query del objeto Request 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:

    public function index(Request $request)
    {
        $role = getRoleCode($request->role);
        $roles = Role::where('role', '=', $role);
    
        $query = $request->query();
    
        if (isset($query['q'])) {
            $q = $query['q'];
            $roles->where('name', 'like', "%$q%");
        }
    
        if (isset($query['gender'])) {
            $gender = $query['gender'];
            $roles->where('gender', '=', $gender);
        }
    
        $roles = $roles->orderBy('id', 'desc')->paginate(20);
    
        return view('admin.users.index', [
            'roles' => $roles,
            'role_name' => config('settings.roles')[$role],
            'role_en_name' => $request->role,
            'q' => isset($query['q']) ? $query['q'] : '',
            'gender' => isset($query['gender']) ? $query['gender'] : ''
        ]);
    }
    

    En este código, $request->query() devuelve un array de todos los parámetros de consulta. Verificamos si el parámetro q existe y lo usamos para filtrar el campo name con un operador like. De manera similar, verificamos si el parámetro gender existe y lo usamos para filtrar el campo gender con un operador igual.

    En la vista, podemos usar las variables q y gender 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.

Comments are closed.