Таким образом, вы можете реализовать это, добавить эти отношения и метод в Team Model
public function homeMatches() {
return $this->hasMany('App\Database\Match', 'team_one_id');
}
public function awayMatches() {
return $this->hasMany('App\Database\Match', 'team_two_id');
}
public function matches() {
return $this->homeMatches->merge($this->awayMatches);
}
Теперь получить данные
$team = Team::find(1);
$matches = $team->matches(); //now it will fetch all matches for both columns
Если вы хотите выбрать совпадения в качестве атрибутов, вы можете добавить один метод в модель вашей команды
public function getMatchesAttribute()
{
return $this->homeMatches->merge($this->awayMatches);
}
Теперь вы можете выбрать совпадения как $matches = $team->matches;
Вот разница
$team->matches
возврат Illuminate\Database\Eloquent\Collection
И
$team->matches()
возврат Illuminate\Database\Eloquent\Relations\{Relation Name}
Вы не можете использовать matches
в загрузке Eager, как Team::with('matches')
, потому что matches
не является отношением и является причиной вашей ошибки.Что вы можете сделать, это добавить homeMatches
и awayMatches
в нетерпеливой загрузке, а затем позвонить $team->matches()
.
$teams = Team::with('homeMatches', 'awayMatches')->get();
$teams->each(function ($team) {
print_r($team);
print_r($team->matches());
});