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
