У меня проблема с моделью / отношениями, с которой я боролся.Это относится к футбольным фэнтезийным видам спорта.
Это отношения между столами:
В FantasyTeam много TeamRoster.
public function fantasyTeamRoster()
{
return $this->hasMany('App\Models\FantasyTeamsRoster','fantasy_team_id','id');
}
В TeamRoster много FantasyPlayer.
public function fantasyPlayer()
{
return $this->hasMany('App\Models\FantasyData\FantasyPlayer','fantasy_player_id','id');
}
Игра FantasyPlayer имеет следующие отношения:
- PlayerGame
- TeamGame
- AllPositionPlayerGame
Код:
public function playerGame()
{
return $this->hasMany('App\Models\FantasyData\PlayerGame','player_id','player_id');
}
public function teamGame()
{
return $this->hasMany('App\Models\FantasyData\TeamGame','team','team');
}
public function allPositionPlayerGame()
{
return $this->hasMany('App\Models\FantasyData\PlayerGame','team','team')
->where('position',$this->FantasyPlayer->position)
->where('played', 1);
}
Проблема, с которой я сталкиваюсь, заключается в следующем:
Все перечисленные выше являются реальными таблицами, а внешний ключ привязан к идентификатору FantasyPlayer или значению идентификатора команды.Поэтому, когда я ищу запись PlayerGame или TeamGame - все работает как положено, потому что все внешние ключи настроены.
Однако AllPositionPlayerGame не является реальной таблицей.На самом деле мне нужны отношения, основанные на атрибуте позиции FantasyPlayer в модели (QB, RB, WR и т. Д.), И представляют собой сумму ВСЕХ записей PlayerGame, которые соответствуют этой позиции и команде FantasyPlayer.
- Идея о том, что FantasyPlayer может быть настоящим уникальным игроком-человеком
- Или FantasyPlayer может быть представлением всего реального игрока-человека с суммированными значениями их коллекций (два разных квотербека сыграли такмы хотим суммировать все записи и представить их как ОДНУ запись)
Код связи AllPositionPlayerGame, который я предоставил, является примером того, насколько простым может быть запрос, но я не могу заставить его работать автоматически с тем, как явосстановить мои данные.
Чтобы усложнить ситуацию: я стремлюсь загрузить эти отношения, потому что есть много связей, связанных далее по цепочке.
Когда я запрашиваю данные, я делаю что-то вроде этого:
$filter = function($query)use($week,$season,$seasonType) {
$query->where('season', $season);
$query->where('week', $week);
$query->where('season_type', $seasonType);
};
$teamRoster = FantasyTeam::where('id',$teamId)
->with(['fantasyTeamRoster.fantasyPlayer.teamGame' => $filter])
->with(['fantasyTeamRoster.fantasyPlayer.playerGame'=> $filter])
->with(['fantasyTeamRoster.fantasyPlayer.allPositionPlayerGame'=> $filter])
->with(['fantasyTeamRoster.fantasyPlayer'=> $filter])
->with(['fantasyTeamRoster' => $filter])
->first();
Есть ли способ создать это символическое отношение AllPositionPlayerGame?Либо с помощью другой установки отношений, пользовательского сбора или расширения модели для добавления дополнительных функций?Я не совсем уверен, какой подход для достижения этой целиПредложения приветствуются!