Laravel 12: Uso de where, orWhere, when y query con ejemplos prácticos
Una de las características más potentes de Laravel 12 es la facilidad para construir consultas dinámicas usando Eloquent y Query Builder. En este tutorial veremos cómo utilizar where, orWhere, when y query para crear filtros avanzados y reutilizables.
1. Uso de where
$query = Lead::query()
->where('state', 1)
->get();
El método where sirve para filtrar resultados con condiciones simples.
2. Uso de orWhere
$query = Lead::query()
->where('state', 1)
->where(function ($q) use ($search) {
$q->where('nombres', 'like', "%{$search}%")
->orWhere('telefono', 'like', "%{$search}%")
->orWhere('correoelectronico', 'like', "%{$search}%");
})
->get();
Agrupa condiciones en funciones anónimas para evitar errores de lógica.
3. Uso de when
$query = Lead::query()
->where('state', 1)
->when($stateFilter === 'active', fn($q) => $q->where('perfilcoincide', 'si'))
->when($stateFilter === 'inactive', fn($q) => $q->where('perfilcoincide', 'no'))
->when($stateFilter === 'iniciar', fn($q) => $q->where('perfilcoincide', 'iniciar'))
->get();
Tip:
when hace el código más legible y limpio que usar varios if.4. Uso de query()
$query = Lead::query();
$query->where('state', 1);
$results = $query->get();
query() se usa para inicializar consultas base que luego puedes extender dinámicamente.
5. Ejemplo completo
public function render()
{
$this->authorize('viewAny', Lead::class);
$user = auth()->user();
$query = Lead::query()
->where('state', 1)
->where(function ($q) {
$q->where('nombres', 'like', '%' . $this->search . '%')
->orWhere('telefono', 'like', '%' . $this->search . '%')
->orWhere('correoelectronico', 'like', '%' . $this->search . '%');
})
->when($this->stateFilter === 'active', fn($q) => $q->where('perfilcoincide', 'si'))
->when($this->stateFilter === 'inactive', fn($q) => $q->where('perfilcoincide', 'no'))
->when($this->stateFilter === 'iniciar', fn($q) => $q->where('perfilcoincide', 'iniciar'));
if (!$user->hasRole('Admin')) {
$query->where('user_id', $user->id);
}
$leads = $query->orderBy($this->sort, $this->direction)->paginate($this->cant);
return view('livewire.admin.lead-list', compact('leads'));
}
6. Comparativa rápida
| Método | Uso principal |
|---|---|
where |
Filtrar resultados con condiciones simples. |
orWhere |
Combinar condiciones alternativas. |
when |
Agregar condiciones dinámicamente. |
query |
Inicializar consultas base. |
🚀 Conclusión
En Laravel 12, los métodos where, orWhere, when y query son esenciales para consultas limpias, flexibles y escalables. Con ellos puedes crear filtros dinámicos, legibles y