У меня есть 3 таблицы: play, user и user_play, которая является связующей таблицей для других (все модели были сгенерированы с помощью gii, и у них есть отношения и т. д.). Мне нужно получить данные из таблицы воспроизведения на основе пользователя (где идентификатор пользователя = 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 и отобразить их? Или, может быть, есть более простой способ получить нужные мне данные? Пожалуйста помоги.
GridView
. - person arogachev   schedule 05.02.2015