I have a many to many relation in Partners model that is referencing itself. The pivot table partner_owners has owner_id, owned_id, percent
So a partner can own another partner and so on.
How can I query all the nested relations for a partner without knowing how many levels are there?
For example $partner = Partner::where('id', 1)->get(); if this partner is owned by two others and each of the two others are owned by some others and so on I can’t figure out a way to display them all without knowing how many levels are there.
namespace AppModels;
use IlluminateDatabaseEloquentModel;
class Partners extends Model
{
/**
* Owners of the partner.
*/
public function Owners()
{
return $this->belongsToMany(Partner::class, 'partner_owners', 'owned_id', 'owner_id')
}
}
Advertisement
Answer
You could create a new method called allOwners or as you wish. In it you must add the following.
/**
* All owners that belong to the partner.
*/
public function allOwners()
{
return $this->belongsToMany(Partner::class, 'partner_owners', 'owned_id', 'owner_id')->with('Owners')
}
So, if you call Partner::with(‘Owners’), it will get you one level of “children”, but Partner::with(‘allOwners’) will give you as many levels as it could find.