繁体   English   中英

YII2-如何在同一张表上显示两个关系的不同值

[英]YII2 - How to Display Defferent Value of Two Relation on Same Table

我有足球比赛功能。 但是,无论在家还是在外,总是要显示同一支球队。

这是我的代码,

型号[比赛]:

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

如何解决这个问题?

您可以使用内部联接

 $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`');

您应该使用适当的表别名来引用列名

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM