🔎 Búsquedas avanzadas en bases de datos
Potencia tus consultas con cláusulas "where" y más
Para construir aplicaciones robustas, a menudo necesitamos realizar búsquedas que van más allá de una simple coincidencia. Laravel, con su constructor de consultas y el ORM **Eloquent**, nos facilita la creación de consultas complejas de manera legible y segura, utilizando cláusulas como **`where`**, **`orWhere`**, y las búsquedas con **`LIKE`**.
🔍 Búsqueda parcial con LIKE
Para encontrar registros donde un campo contenga un término específico (búsqueda parcial), utilizamos la cláusula **`where`** junto con el operador **`LIKE`** y el comodín **`%`**.
app/Http/Controllers/SearchController.php
        
      public function search(Request $request) { $searchTerm = $request->input('q'); $results = Product::where('name', 'LIKE', '%' . $searchTerm . '%') ->orWhere('description', 'LIKE', '%' . $searchTerm . '%') ->get(); return view('search.results', compact('results', 'searchTerm')); }
El uso de **`orWhere`** nos permite buscar el término en múltiples campos.
🚦 Cláusulas OR y anidamiento de condiciones
Cuando necesitamos agrupar condiciones, como **(A AND B) OR C**, Laravel nos permite anidar las condiciones **`where`** pasando una *clausura* (función anónima) como segundo argumento.
Ejemplo de consulta anidada
        
      $products = Product::where('status', 'active')
    ->where(function ($query) {
        $query->where('price', '>', 500)
              ->orWhere('stock', '>', 100);
    })
    ->get();
    **Explicación:** Esta consulta busca productos que están **activos** y que tienen un **precio superior a 500** *o* un **stock superior a 100**.
🔗 Búsquedas por relación (Where Has)
Uno de los requerimientos más comunes es buscar un modelo basándose en la existencia o en las propiedades de una relación. Laravel nos ofrece el método **`whereHas()`**.
Buscando usuarios con posts activos
        
      $users = User::whereHas('posts', function ($query) {
    $query->where('is_published', true);
})->get();
    Esto recupera a todos los **Usuarios** que tienen al menos un **Post** que está marcado como publicado (donde `is_published` es `true`).
✅ Buenas prácticas
- Utiliza el **constructor de consultas** o **Eloquent** para prevenir ataques de inyección SQL.
 - Para búsquedas con `LIKE`, utiliza siempre *bindings* o la sintaxis de Eloquent para sanitizar la entrada.
 - Considera utilizar **Scout** con un motor como **MeiliSearch** o **Algolia** para búsquedas a gran escala, ya que son mucho más rápidos que las búsquedas directas en la base de datos con `LIKE`.
 - Indexa las columnas que utilizas frecuentemente en tus cláusulas `where` y `order by` para mejorar el rendimiento.
 
  
0 Comentarios
Si desea contactar comigo, lo puede hacer atravez deste formulario gracias