Dynamic Relationships in Laravel using Eloquent Macros

Dynamic Relationships in Laravel using Eloquent Macros

Laravel Eloquent macros are a great way of extending some of Laravel's core classes. Using macros, we can extend a Laravel model to have certain relationships that have not been defined on the model class itself.

Here is an example on how to do this:

// Add to the boot() method of the AppServiceProvider
Builder::macro('warehouses', function () {
  return $this->getModel()->hasManyThrough(
    ShareholderWarehouse::class,
    City::class,
    'state_id',
    'city_id'
  );
});

Now all your models will have the warehouses relationship. You can add more logic ofcourse, but this is a good way to dynamically add model relationships.