馃攷 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