DEV Community

Cover image for Laravel Nested Eager Loading on Polymorphic Relationships
Muath Alsowadi
Muath Alsowadi

Posted on • Originally published at muathye.com

6 1

Laravel Nested Eager Loading on Polymorphic Relationships

Laravel Nested Eager Loading on Polymorphic Relationships

Sometimes you need to eager load different relationships depending on the type of model on a polymorphic relationship.

tip

For example: you have two type of users seller and buyer, the eager load relationship for seller is the product and the eager load relationship for buyer is the order.

  • First setup the Models.


class Seller extends Model
{
    public function products()
    {
        return $this->hasMany(Product::class);
    }
}


Enter fullscreen mode Exit fullscreen mode


class Buyer extends Model
{
    public function orders()
    {
        return $this->hasMany(Order::class);
    }
}


Enter fullscreen mode Exit fullscreen mode


class Profile extends Model
{
    public function user()
    {
        return $this->morphTo();
    }
}


Enter fullscreen mode Exit fullscreen mode
  • Then load the relations like the following:


Profile:with('user', function (MorphTo $morphTo) {
    // Eager load the products for seller.
    // Eager load the orders for buyer 👇
    $morphTo->morphWith([
        Seller::class => ['products'],
        Buyer::class => ['orders'],
    ]);
})->get();


Enter fullscreen mode Exit fullscreen mode

Top comments (1)

Collapse
 
pepperfm profile image
Dmitry

i spend a lot of time for find this solution. and finally im here. thank you!