Cómo usar la condición IF en una consulta SELECT en Laravel
En Laravel, es muy común necesitar aplicar condiciones IF dentro de una consulta SELECT, por ejemplo para mostrar valores personalizados, calcular campos dinámicos o aplicar lógica condicional directamente desde la base de datos.
En este artículo aprenderás cómo usar condiciones IF en consultas SELECT en Laravel, utilizando Eloquent, Query Builder y DB::raw(), con ejemplos claros y prácticos.
Opción 1: Usar IF con DB::raw() (MySQL)
Si usas MySQL, puedes utilizar la función IF() directamente.
Ejemplo básico
use Illuminate\Support\Facades\DB;
$usuarios = DB::table('users')
->select(
'name',
DB::raw("IF(status = 1, 'Activo', 'Inactivo') AS estado")
)
->get();Resultado:
- Si status = 1 → Activo
- Si status = 0 → Inactivo
Opción 2: Usar CASE WHEN (recomendado y estándar SQL)
CASE WHEN es más portable y funciona en MySQL, PostgreSQL y SQL Server.
Ejemplo con Query Builder
$usuarios = DB::table('users')
->select(
'name',
DB::raw("
CASE
WHEN status = 1 THEN 'Activo'
ELSE 'Inactivo'
END AS estado
")
)
->get();Recomendado si trabajas con distintos motores de base de datos.
Opción 3: IF condicional dinámico en Laravel
Si deseas aplicar condiciones solo cuando se cumpla algo, Laravel ofrece el método when().
Ejemplo práctico
$usuarios = DB::table('users')
->when(request('status'), function ($query, $status) {
return $query->where('status', $status);
})
->get();Este enfoque es ideal para filtros dinámicos en APIs o formularios.
Conclusión
Laravel ofrece múltiples formas de usar condiciones IF en consultas SELECT, ya sea directamente en SQL con IF o CASE, o dinámicamente con when().
- Elegir la opción correcta dependerá de:
- El motor de base de datos
- La complejidad de la consulta
- El rendimiento esperado