2016-04-19 17:14:16 5451次浏览 2条回答 2 悬赏 10 金钱

现在遇到一个问题,展示渠道表内的内容时,需要用到一个用户表的字段信息

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}',
        ],
    ],
]); ?>

最佳答案

  • lcn 发布于 2016-04-20 09:32 举报

    Channel模型里,定义一个getUser函数

    
    public function getUser()
    {
        return $this->hasOne(User::className(), ['user_id' => 'user_id']);
    }
    
    // gridview里调用
    
    [
         'attribute' => 'user_id',
          'value'=> $model->user ? $model->user->email : ''
    ],
    
    
    
    1 条回复
    回复于 2016-04-20 12:05 回复

    谢谢指导!

  • 回答于 2016-04-20 10:15 举报

    两个思路:
    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 条回复
    回复于 2016-04-20 12:06 回复

    也谢谢这位兄台认真的回答

您需要登录后才可以回答。登录 | 立即注册
zavier
董事长

zavier

注册时间:2016-04-01
最后登录:2022-09-22
在线时长:5344小时52分
  • 粉丝19
  • 金钱10890
  • 威望30
  • 积分64630

热门问题