第一篇文章所以在這裏輸出數據雲:Laravel 4無法爲複雜的模型結構
我建立一個統計網站,Laravel 4,並已建立了幾個模型之間的關係 - 播放機,遊戲,團隊,PlayerData ,StatType標識
所有這些都有相應的表格: 球員:ID,姓名,TEAM_ID
games: id, home_team_id, away_team_id, week (note 2 teams in a single game)
teams: id, name
stat_types: id, name
player_datas: id, player_id, stat_type_id, stat_value, game_id
的想法是,每個球員效力於一支球隊,一個星期誰扮演一次,每次統計的玩家進入每個遊戲將在玩家數據表中具有一個條目(例如,玩家1,stat_id 1,值2,遊戲1,玩家1,stat_id 2,值10,遊戲1)
所以我想要做的是輸出一個表,當有人想要查看播放器玩家show.blade.php(
*代表佔位符):
****更新:我已經得到了我想要通過使觀察者的修改建議,但得到的第二和第三細胞出現數據像下面(在我看來)似乎效率低下?覺得我失去了一些東西
@foreach($team_fixtures as $team_fixture)
<tr>
<td>{{$team_fixture->homeTeam->team_name}} vs {{$team_fixture->awayTeam->team_name}}</td>
<td>{{$team_fixture->playerData()->where('player_id', $player->id)
->where('stat_type_id', '1')
->pluck('stat_value')}}</td>
<td>{{$team_fixture->playerData()->where('player_id', $player->id)
->where('stat_type_id', '2')
->pluck('stat_value')}}</td>
</tr>
@endforeach
我不能告訴我是否錯過了透視表(player_data_stat_types?)或者已經拿到了關係,錯了嗎?如果有更好的結構方式,我會很樂意這樣做,但我不確定從哪一個開始。我開始爲每個$ team_fixtures做一次,但無法獲得輸出的統計信息。我的問題是,夾具左欄,但球員數據表有針對game_id多個條目...
我的播放器看起來像:
public function show($id)
{
$player = Player::findOrFail($id);
$team_fixtures = Game::where('home_team_id', '=', $player->team_id)
->orWhere('away_team_id', '=', $player->team_id)
->get();
return View::make('site/players.show', compact('player', 'team_fixtures'));
}
和模型鏈接如下: 團隊:
public function players() {
return $this->hasMany('Player');
}
public function games() {
return $this->belongsToMany('Game');
}
球員:
public function team() {
return $this->belongsTo('Team');
}
public function playerData(){
return $this->hasMany('PlayerData');
}
遊戲:
public function playerData() {
return $this->hasMany('PlayerData');
}
public function homeTeam()
{
return $this->hasOne('Team', 'id', 'home_team_id');
}
public function awayTeam()
{
return $this->hasOne('Team', 'id', 'away_team_id');
}
public function playerData(){
return $this->belongsTo('Player', 'player_id', 'id');
}
PlayerData:
public function statType(){
return $this->belongsTo('StatType', 'stat_id', 'id');
}
public function game(){
return $this->belongsTo('Game');
}
StatType標識:
public function playerData(){
return $this->hasMany('PlayerData');
}
乾杯。我明白你要做什麼,但是$遊戲沒有定義。我應該只是傳遞來自控制器的所有遊戲或我已經在做什麼?因爲如果我傳入$ team_fixtures(請參閱OP)並且將$ team_fixtures作爲$ game來執行,那麼它表示$ game-> stats-> get($ game-> id)是一個無效的foreach參數? – ExoticChimp 2014-09-05 06:33:43
在我的示例中'$ games'與您的'$ team_fixtures'完全相同,我只是使用了模型的名稱,所以它更易於閱讀。然後,'$ game'上沒有'stats','stats'是'$ player' - 嵌套的foreach中的一個關係。 – 2014-09-05 08:38:19
啊對,我想我明白你的意思了 - 在遊戲和玩家之間有一個數據透視表(我想我應該遵循Laravel的命名規則,擺脫'player_datas'?)並使用多對多關係來獲得與玩家相關的統計信息 – ExoticChimp 2014-09-05 13:28:58