Моделирование базы данных Laravel Eloquent - PullRequest
0 голосов
/ 15 мая 2019

У меня проблема с моделью / отношениями, с которой я боролся.Это относится к футбольным фэнтезийным видам спорта.

Это отношения между столами:

В 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?Либо с помощью другой установки отношений, пользовательского сбора или расширения модели для добавления дополнительных функций?Я не совсем уверен, какой подход для достижения этой целиПредложения приветствуются!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...