Qué es el trait Conditionable
El traitIlluminate\Support\Traits\Conditionable añade a un objeto los métodos when() y unless(). Su característica principal es que permite bifurcar el comportamiento en función de una condición sin romper el encadenamiento de métodos.
El código fuente real se encuentra en
src/Illuminate/Conditionable/Traits/Conditionable.php. Se referencia mediante el alias Illuminate\Support\Traits\Conditionable.Uso básico
when() — se ejecuta cuando la condición es verdadera
unless() — se ejecuta cuando la condición es falsa
unless() es el opuesto de when(): la callback se ejecuta cuando la condición es falsa.
Por qué la cadena de métodos continúa
Si la callback devuelvenull, se devuelve $this (el objeto que utiliza el trait). Si la callback devuelve algo distinto de null, se devuelve ese valor.
null), se devuelve $this.
Llamada sin argumentos — HigherOrderWhenProxy
Si llamas awhen() sin argumentos, se devuelve un HigherOrderWhenProxy. Con él puedes definir la condición a posteriori.
Pasar un closure como valor
Si pasas un closure como primer argumento, el resultado de ejecutarlo se utiliza como condición.Patrón típico en QueryBuilder
La construcción de consultas dinámicas conwhen() es el caso de uso más habitual.
Aplicar Conditionable a tus propias clases
Basta con haceruse del trait para que when() y unless() estén disponibles.
Uso con Mail, Notification y Response
when() también resulta útil para construir correos, notificaciones y respuestas.
Cuándo usar tap() y cuándo when()
tap() y when() se parecen, pero tienen propósitos distintos.
Próximos pasos
Mensajes de orden superior en colecciones
Aprende cómo funciona una sintaxis como
$collection->map->method() y cómo usarla en la práctica.