2012-08-03 98 views
2

我想學習CakePHP,我很難得到一些數據。 我正在研究一個網站跟蹤曲棍球統計(真正的基本統計)。我有5張桌子。CakePHP - 困難的時候返回一些數據3級深

  • 賽季(ID,DATE_START,DATE_END)
  • 遊戲(ID,日期,score_team1,score_team2,team1_id,team2_id,season_id)
  • 隊(ID,名稱,顏色)
  • 玩家(ID ,名字,姓氏)
  • players_teams(ID,player_id,TEAM_ID)

我能夠從遊戲顯示拿到2隊比賽的。 我也可以從團隊視圖中獲取團隊的所有球員。

我需要幫助瞭解如何從遊戲的角度獲得團隊的所有玩家。 我嘗試了很多東西,但似乎沒有工作。我很艱難,我可以通過從我的遊戲視圖中做一些類似$ game ['Team1'] ['Players']的球員來獲得球隊的所有球員,但這不起作用。我試圖從遊戲中深入到一個團隊的球員。 賽季 - >遊戲 - >球隊1->球員,但我堅持在team1的水平。

下面是一些我的代碼

/CakePHP的/支 - >調試($隊[1])

array(
    'Team' => array(
     'id' => '2', 
     'name' => 'Rouge', 
     'color' => 'Rouge' 
    ), 
    'Players' => array(
     (int) 0 => array(
      'id' => '2', 
      'first_name' => 'Player2FN', 
      'last_name' => 'Player2LN', 
      'PlayersTeam' => array(
       'id' => '2', 
       'player_id' => '2', 
       'team_id' => '2' 
      ) 
     ), 
     (int) 1 => array(
      'id' => '4', 
      'first_name' => 'Player4FN', 
      'last_name' => 'Player4LN', 
      'PlayersTeam' => array(
       'id' => '4', 
       'player_id' => '4', 
       'team_id' => '2' 
      ) 
     ) 
    ) 
) 

不過從比賽的細節視圖我得到這個 - >調試($遊戲) :

array(
    'Game' => array(
     'id' => '2', 
     'date' => '2012-09-16 19:30:00', 
     'score_team1' => '8', 
     'score_team2' => '4', 
     'team1_id' => '2', 
     'team2_id' => '1', 
     'season_id' => '1' 
    ), 
    'Team1' => array(
     'id' => '2', 
     'name' => 'Rouge', 
     'color' => 'Rouge' 
    ), 
    'Team2' => array(
     'id' => '1', 
     'name' => 'Bleu', 
     'color' => 'Bleu' 
    ), 
    'Season' => array(
     'id' => '1', 
     'date_start' => '2012-09-09', 
     'date_end' => '2013-04-07' 
    ) 
) 

我敢肯定這是一個模式的問題,所以這裏是我的兩個團隊和博弈模型

<?php 
    class Game extends AppModel { 
     public $name = 'Game'; 
     public $belongsTo = array(
      'Season', 
      'Team1' => array (
       'className' => 'Team', 
       'foreignKey' => 'team1_id' 
      ), 
      'Team2' => array (
       'className' => 'Team', 
       'foreignKey' => 'team2_id' 
      ) 
     ); 
    } 
?> 

<?php 
    class Team extends AppModel { 
     public $name = 'Team'; 
     public $hasAndBelongsToMany = array(
      'Players' => 
       array(
        'className'    => 'Player', 
        'joinTable'    => 'players_teams', 
        'foreignKey'    => 'team_id', 
        'associationForeignKey' => 'id' 
       ) 
     ); 
    } 
?> 

回答

1

使用

$this->Game->recursive=2; 
    $this->Game->find('all'); 
+0

謝謝!奇蹟般有效 ! – PureConstant 2012-08-03 18:25:54

+0

我理解這個作品,但對大量數據來說效率不高嗎? Contain行爲會更好嗎? – Suman 2012-08-03 21:21:19

+0

是的。這取決於你的數據庫是如何設置的,但是如果模型有點複雜,那就是性能消耗。我總是嘗試實現包含,但遞歸具有作爲單線程的巨大優勢。很適合快速開發,小數據,簡單的模型。最後,我相信這些內容是必要的,但是在Pureconstant更熟悉框架的時候可以實施。 – 2012-08-03 21:24:59