<?php $this->widget('zii.widgets.grid.CGridView', array(
'dataProvider' => $dataProvider,
'columns' => array(
array(
'header' => 'User Name',
'value' => 'CHtml::encode($data->sud_profile->user_id)',//This will use the relationship and get all the details of the paticular user from users table
),
'subject',
'message',
У меня есть две таблицы, в которых я хочу отображать имена вместо идентификаторов. Мои две таблицы:
Таблица 1
msg table
---------
id sender receiver subject message
------------------------------------
1 3 4 wish have a god
Таблица 2
--------
sud_profile
-------------
id user_id firstname lastname
1 2 kumar rai
Из этих двух таблиц я хочу отображать имена на основе идентификаторов, таких как sender и user_id.
эй, отметьте ответ как правильный, если он вам помог





Вы должны были добавить код для соответствующих моделей или добавить соответствующие отношения в обе модели, но я попытаюсь направить вас, чтобы вы могли следить за своим кодом.
Вы можете вызвать отношение, определенное внутри модели Message, для доступа к пользователю, а затем отобразить username.
msgЯ предполагаю, что столбцы sender и receiver содержат id из таблицы user, вы должны иметь отношения, определенные внутри модели Message, или определить их сейчас и добавить ниже в свой массив отношений (измените имена моделей и имена полей, если они отличаются).
Поскольку у вас есть 2 столбца sender и receiver, оба содержат разные user_id, поэтому вам нужно определить 2 отношения.
public function relations()
{
// NOTE: you may need to adjust the relation name and the related
// class name for the relations automatically generated below.
return array(
'_sender' => array(self::BELONGS_TO, 'User', 'sender'),
'_receiver' => array(self::BELONGS_TO, 'User', 'receiver'),
);
}
а затем внутри GridView измените конфигурацию столбцов на следующую.
<?php $this->widget('zii.widgets.grid.CGridView', array(
'dataProvider' => $dataProvider,
'columns' => array(
array(
'name'=>'sender',
'header'=>'Sender',
'htmlOptions'=>array('data-title'=>'Sender'),
'value'=>'$data->_sender->username'
),
array(
'name'=>'receiver',
'header'=>'Receiver',
'htmlOptions'=>array('data-title'=>'Receiver'),
'value'=>'$data->_receiver->username'
),
))
);
sud_profileВам нужно сделать то же самое для таблицы sud_profile, определить отношение и отобразить его, используя отношение внутри gridview.
Ваше отношение будет выглядеть ниже
public function relations()
{
// NOTE: you may need to adjust the relation name and the related
// class name for the relations automatically generated below.
return array(
'_user' => array(self::BELONGS_TO, 'User', 'user_id'),
);
}
И используйте отношение, как показано ниже, в конфигурациях столбцов gridview
<?php $this->widget('zii.widgets.grid.CGridView', array(
'dataProvider' => $dataProvider,
'columns' => array(
array(
'name'=>'user_id',
'header'=>'Username',
'htmlOptions'=>array('data-title'=>'Sender'),
'value'=>'$data->_user->username'
),
))
);
добавить обе ваши модели или поделиться отношениями, которые вы объявили внутри моделей, а
senderиreceiverвнутри таблицыmsgсодержат идентификатор из таблицыuser? а вы хотите отобразитьname? илиusernameдля этих столбцов, поскольку таблицаsud_profileуже содержит имена пользователейfirstиlast?