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
This is super easy to do with the morphWith
method.
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.
php
class Seller extends Model
{
public function products()
{
return $this->hasMany(Product::class);
}
}
php
class Buyer extends Model
{
public function orders()
{
return $this->hasMany(Order::class);
}
}
php
class Profile extends Model
{
public function user()
{
return $this->morphTo();
}
}
- Then load the relations like the following:
php
Profile:with('user', function (MorphTo $morphTo) {
// Eager load the products for seller
// and orders for buyer 👇
$morphTo->morphWith([
Seller::class => ['products'],
Buyer::class => ['orders'],
]);
})->get();