Skip to main content

Wat is de Conditionable-trait?

De trait Illuminate\Support\Traits\Conditionable voegt de methodes when() en unless() toe aan een object. Kenmerkend is dat je op basis van voorwaarden kunt vertakken en toch je method chain kunt voortzetten.
De echte broncode staat in src/Illuminate/Conditionable/Traits/Conditionable.php. Je verwijst ernaar via de alias Illuminate\Support\Traits\Conditionable.
Veel klassen in Laravel gebruiken deze trait, waaronder de QueryBuilder, EloquentBuilder, Mail en Notifications.

Basisgebruik

when() — uitvoeren als de voorwaarde waar is

Is de waarde van het eerste argument waar, dan wordt de callback in het tweede argument uitgevoerd. Is die onwaar, dan wordt de callback in het derde argument (de default) uitgevoerd.

unless() — uitvoeren als de voorwaarde onwaar is

unless() is het omgekeerde van when(). De callback wordt uitgevoerd wanneer de voorwaarde onwaar is.

Waarom de method chain doorloopt

Geeft de callback null terug, dan wordt $this teruggegeven (het object dat de trait gebruikt). Geeft de callback iets anders dan null terug, dan wordt die returnwaarde teruggegeven.
In de broncode is dit als volgt geïmplementeerd:
Geeft de callback expliciet een waarde terug, dan gaat die waarde door naar de volgende stap in de chain. Geeft hij niets terug (null), dan wordt $this teruggegeven.

Aanroepen zonder argumenten — HigherOrderWhenProxy

Roep je when() aan zonder argumenten, dan krijg je een HigherOrderWhenProxy terug. Daarmee kun je de voorwaarde later instellen.
Roep je de methode aan met één argument, dan krijg je een proxy terug die die waarde als voorwaarde vasthoudt.

Een closure als waarde doorgeven

Geef je een closure door als eerste argument, dan wordt de returnwaarde van die closure als voorwaarde gebruikt.
Zo kun je de logica voor het evalueren van de voorwaarde in een callback onderbrengen.

Typisch patroon bij de QueryBuilder

Dynamische query’s opbouwen met when() is de meest voorkomende use case.

Conditionable toepassen op je eigen klasse

Je hoeft de trait alleen te use-en en when() / unless() zijn beschikbaar.

Toepassing bij Mail, Notifications en Responses

when() kun je ook gebruiken bij het opbouwen van e-mails, notificaties en responses.

Wanneer gebruik je tap() en wanneer when()?

tap() en when() lijken op elkaar, maar hebben een ander doel.
Wil je alleen iets doen in de chain voor debuggen of een bijeffect, gebruik dan tap(). Wil je de verwerking laten afhangen van een voorwaarde, gebruik dan when() / unless().

Volgende stap

Higher order messages van collections

Leer hoe syntaxis als $collection->map->method() werkt en hoe je die in de praktijk gebruikt.
Laatst gewijzigd op 6 september 2026