Search code examples
phplaravelormeloquent

Laravel - Eloquent - Dynamically defined relationship


Is it possible to set a model's relationship dynamically? For example, I have model Page, and I want to add relationship banners() to it without actually changing its file? So does something like this exist:

Page::createRelationship('banners', function(){
    $this->hasMany('banners');
});

Or something similar? As they are fetched using the magic methods anyway, perhaps I can add the relationship dynamically?

Thanks!


Solution

  • As of laravel 7, dynamic relationship is officially supported. You can use the Model::resolveRelationUsing() method.

    https://laravel.com/docs/7.x/eloquent-relationships#dynamic-relationships