2017-05-27 52 views
0

我有足球比賽功能。但總是在主場或離開時顯示相同的球隊。YII2 - 如何在同一張表上顯示兩個關係的不同值

這裏是我的代碼,

模型[賽事]:

use app\models\Team; 

... 

public function getTeam() 
{ 
return $this->hasOne(Team::className(), ['id' => 'home', 'id' => 'away']); 
} 

... 
  • 團隊模式是所有球隊的名單
  • 匹配表,只限於主場球隊的ID和一塊田裏

型號[MatchSearch]:

.... 

    public $team_home; 
    public $team_away; 

    public function rules() 
    { 
     return [ 
      [['home', 'away'], 'integer'], 
      [['team_home', 'team_away'], 'safe'], 
     ]; 
    } 

    ... 

    public function search($params) 
    { 
     $query = Match::find()->joinWith(['team']); 

     $dataProvider = new ActiveDataProvider([ 
      'query' => $query, 
     ]); 

     $dataProvider->sort->attributes['team_home'] = [ 
      'asc' => ['team.team' => SORT_ASC], 
      'desc' => ['team.team' => SORT_DESC], 
     ]; 

     $dataProvider->sort->attributes['team_away'] = [ 
      'asc' => ['team.team' => SORT_ASC], 
      'desc' => ['team.team' => SORT_DESC], 
     ]; 

     $this->load($params); 

     if (!$this->validate()) { 
      return $dataProvider; 
     } 

     $query->andFilterWhere([ 
      'home' => $this->home, 
      'away' => $this->away, 
     ]); 

     $query->andFilterWhere(['like', 'team.team', $this->team_home]) 
       ->andFilterWhere(['like', 'team.team', $this->team_away]); 

     return $dataProvider; 
    } 

查看[索引]:

<?= GridView::widget([ 
    'dataProvider' => $dataProvider, 
    'filterModel' => $searchModel, 
    'columns' => [ 
     [ 
      'attribute' => 'home', 
      'value' => function($data) { 
       return $data->team->team; 
      }, 
     ], 
     [ 
      'attribute' => 'away', 
      'value' => function($data) { 
       return $data->team->team; 
      }, 
     ], 

     ['class' => 'yii\grid\ActionColumn'], 
    ], 
]); ?> 
<?php Pjax::end(); ?> 

但結果總是顯示客隊都在家或外出:

Home : 
    Team Away 
Away : 
    Team Away 

如何解決這一問題?

回答

0

您可以使用內部聯接

$query = Match::find() 
     ->innerJoin('team_tname as home', '`team_taame`.`id` = `match_table_name`.`home`') 
     ->innerJoin('team_taname as away', '`team_name`.`id` = `match_table_name`.`away`'); 

的你應該指的是列名使用了正確的表的別名

+0

另一個錯誤:SQLSTATE [42000]:語法錯誤或訪問衝突:1066不是唯一的表/別名:'團隊' – Rivaldy

相關問題