【发布时间】:2015-02-05 10:00:37
【问题描述】:
我有 3 个表,play、user 和 user_play,它们是其他表的联结表(所有模型都是用 gii 生成的,它们有关系等等)。我需要根据用户(其中用户 id = x)从播放表中获取数据并将其发送到 gridview。
我还想显示 user_play 表中的一些数据,例如组属性并统计所有注册游戏的玩家:
<?= GridView::widget([
'dataProvider' => $dataProvider,
'filterModel' => $searchModel,
'columns' => [
['class' => 'yii\grid\SerialColumn'],
'name',
'date',
'user_play.group',
'user_play.userCount',
'time',
['class' => 'yii\grid\ActionColumn'],
],
]); ?>
我的用户和游戏表中有这种关系:
public function getUserPlays()
{
return $this->hasMany(UserPlay::className(), ['user_id' => 'id']);
}
我在用户和播放表中也有类似的关系:
//user table
public function getPlay()
{
return $this->hasMany(Play::className(), ['id' => 'play_id'])
->via('userPlays');
}
//play table
public function getUser()
{
return $this->hasMany(User::className(), ['id' => 'user_id'])
->via('userPlays');
}
我不知道如何使用上述两个关系,有人可以向我解释一下,或者可以发布一些信息的链接吗?在互联网上找不到任何东西。
但这行代码让我得到了我想要的,即来自特定用户的播放表的数据:
$plays = Play::find()
->joinWith(['userPlays'])
->where(['user_play.user_id' => Yii::$app->user->id])
->all();
但是当我尝试将此输出放入数据提供程序时,我收到一个错误:
Call to a member function getCount() on a non-object
如何将此数据发送到 gridview dataprovider 并显示它?或者也许有更简单的方法来获取我想要的数据?请帮忙。
【问题讨论】:
-
您希望如何显示它?另外请添加
GridView渲染代码。 -
抱歉,编辑了这个问题,基本上所有 Play 表属性都带有一些 user_play 表属性。
-
你能添加表结构和完整的堆栈跟踪吗?
标签: gridview yii2 dataprovider