You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Yii的CGridView中展示关联表名称而非ID?

解决CGridView中显示sender/receiver用户名而非ID的问题

我来帮你搞定这个需求!要把msg表里sender和receiver的ID换成对应的用户名,思路和你已经实现的用户名称列差不多,只需要两步就能完成:

第一步:在Msg模型里建立关联关系

首先得确保你的Msg模型和用户表(假设模型是User,表名是users)建立了正确的关联。打开Msg.php,找到relations()方法,添加两个关联:

public function relations()
{
    return array(
        // 关联发送者用户模型
        'senderUser' => array(self::BELONGS_TO, 'User', 'sender'),
        // 关联接收者用户模型
        'receiverUser' => array(self::BELONGS_TO, 'User', 'receiver'),
    );
}

这里的senderUser和receiverUser是自定义的关联名称,你可以根据习惯修改,只要对应好msg表的sender和receiver外键就行。

第二步:修改CGridView的列配置

接下来更新你的CGridView代码,把sender和receiver列替换成显示对应的用户名:

<?php $this->widget('zii.widgets.grid.CGridView', array(
    "dataProvider" => $dataProvider,
    "columns" => array(
        array(
            "header" => 'Sender Name',
            "value" => 'CHtml::encode($data->senderUser->user_id)', // 通过关联模型获取发送者用户名
        ),
        array(
            "header" => 'Receiver Name',
            "value" => 'CHtml::encode($data->receiverUser->user_id)', // 通过关联模型获取接收者用户名
        ),
        'subject',
        'message',
    )
)); ?>

几个实用小提示:

  • 如果你的用户表存储用户名的字段不是user_id(比如是username),记得把代码里的user_id改成对应的字段名。
  • 一定要保留CHtml::encode(),这能防止XSS攻击,保障页面安全。
  • 要是担心存在用户被删除的情况(导致关联模型为空),可以加个容错判断:'$data->senderUser ? CHtml::encode($data->senderUser->user_id) : "Unknown"',这样就不会出现报错啦。

内容的提问来源于stack exchange,提问作者Mallesh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 04:06:18