GridView+ActiveDataProvider 怎样才能做到添加一条其他表的数据 [ 2.0 版本 ]
现在遇到一个问题,展示渠道表内的内容时,需要用到一个用户表的字段信息
controller
public function actionIndex()
{
$dataProvider = new ActiveDataProvider([
'query' => Channel::find(),
]);
return $this->render('index', [
'dataProvider' => $dataProvider,
]);
}
views
<?= GridView::widget([
'dataProvider' => $dataProvider,
'columns' => [
['class' => 'yii\grid\SerialColumn'],
'channel_id',
'channel_name',
'email',<=================== 用户表内的一个字段
'channel_created_at',
[
'class' => 'yii\grid\ActionColumn',
'header' => '操作',
'template' => '{view}{update}',
],
],
]); ?>
最佳答案
其他 1 个回答
-
两个思路:
1.联合查询数据,一次性把要的数据查询过来.
如楼上所示,还可以改进一下.//在channel模型中添加 public function getUser() { return $this->hasOne(User::className(), ['user_id' => 'user_id']); } //在channelSearch中 public function search($params) { $query = Channel::find(); $query->joinWith(['user']); //添加此行进行联合查询 .... //在gridview中 <?= GridView::widget([ 'dataProvider' => $dataProvider, 'columns' => [ ['class' => 'yii\grid\SerialColumn'], 'channel_id', 'channel_name', 'user.email',//直接显示用户email 'channel_created_at', [ 'class' => 'yii\grid\ActionColumn', 'header' => '操作', 'template' => '{view}{update}', ], ], ]); ?>
2.在要用到的地方临时查询数据.
[ 'attribute' => 'user_id', 'value'=> function($key){return user::getuseremail($key['user_id'])} //自己定义一个函数查询用户email ],
共 1 条回复
zavier
注册时间:2016-04-01
最后登录:2024-07-09
在线时长:5344小时55分
最后登录:2024-07-09
在线时长:5344小时55分
- 粉丝19
- 金钱10895
- 威望30
- 积分64635