Is there a way to merge 2 relationships in laravel?
this is the way it’s setup now, but Is there a way I could return both merged?
public function CompetitionsHome() { return $this->HasMany( 'Competition', 'home_team_id' ); } public function CompetitionsGuest() { return $this->HasMany( 'Competition', 'guest_team_id' ); } public function Competitions() { // return both CompetitionsHome & CompetitionsGuest }
Advertisement
Answer
Try out getter method for property which returns merged collections returned from relations.
public function getCompetitionsAttribute($value) { // There two calls return collections // as defined in relations. $competitionsHome = $this->competitionsHome; $competitionsGuest = $this->competitionsGuest; // Merge collections and return single collection. return $competitionsHome->merge($competitionsGuest); }
Or you can call additional methods before collection is returned to get different result sets.
public function getCompetitionsAttribute($value) { // There two calls return collections // as defined in relations. // `latest()` method is shorthand for `orderBy('created_at', 'desc')` // method call. $competitionsHome = $this->competitionsHome()->latest()->get(); $competitionsGuest = $this->competitionsGuest()->latest()->get(); // Merge collections and return single collection. return $competitionsHome->merge($competitionsGuest); }