Laravel: Booting and Initializing Models with traits

Betcha’ you didn’t know you can do two things

Italo Baeza Cabrera
The Startup
Published in
2 min readDec 23, 2019


One of the advantages of Eloquent ORM is how it plays nice with traits. When you use an Eloquent Model, you can execute logic when you start using the model itself.

The booting method is very magical since you can attach a Trait to the model, and if you put some methods on the trait, these will be called when you start using the Model. These follow the pattern boot{Trait} and initialize{Trait}, allowing you to reuse the same code in multiple models.

Booting and Initializing

The difference between both is very simple: the boot works statically, while the initialization works dynamically. The boot will affect all instances of the Model, while the initializing will work only for its instance.

To better exemplify how these works, let’s make a trait called HasToken. This trait has two tasks over the given Eloquent Model.

  1. Add an event when creating a model to log who inserted the record.
  2. Add a random string as a token to the model.

The first task is just a way to know the authenticated user created a new model. The second will allow our model to automatically have a random token to avoid creating it manually in each part of our application.

We can do that using a single trait:


The booting method will work over the static model. For example, if you add this trait to the Authentication model, everything you do using this method will affect that model in particular, statically.

The method name must follow the boot{TraitName} pattern.

This is very handy to add callbacks to eloquent events, like creating or retrieving for a given Model, as these work over statically.

* Boot the trait
* @return void
protected function bootHasToken()



Italo Baeza Cabrera
The Startup

Graphic Designer graduate. Full Stack Web Developer. Retired Tech & Gaming Editor.