【问题标题】:Displaying related table column name in listview在列表视图中显示相关表列名称
【发布时间】:2013-04-04 10:35:01
【问题描述】:

我有一个包含 2 个表的简单数据库:tbl_code 和 tbl_user

**tbl_code**
id(PK)
accesscode
createdby(FK references tbl_user.id)
accesstime

**tbl_user**
id (PK)
username
password

我正在尝试在列表视图中显示以下内容

  • id (tbl_code.id)
  • 访问代码
  • createdby -(显示用户表中的用户名)
  • 访问时间

当前控制器:

$dataProvider=new CActiveDataProvider('Code');
    $this->render('index',array(
        'dataProvider'=>$dataProvider,
    ));

索引视图

<?php $this->widget('zii.widgets.CListView', array(
    'dataProvider'=>$dataProvider,
    'itemView'=>'_view',
)); ?>

最后是_view

<div class="view">

    <b><?php echo CHtml::encode($data->getAttributeLabel('id')); ?>:</b>
    <?php echo CHtml::link(CHtml::encode($data->id), array('view', 'id'=>$data->id)); ?>
    <br />

    <b><?php echo CHtml::encode($data->getAttributeLabel('accesscode')); ?>:</b>
    <?php echo CHtml::encode($data->accesscode); ?>
    <br />

    <b><?php echo CHtml::encode($data->getAttributeLabel('createdby')); ?>:</b>
    <?php echo CHtml::encode($data->createdby); ?>
    <br />

    <b><?php echo CHtml::encode($data->getAttributeLabel('accesstime')); ?>:</b>
    <?php echo CHtml::encode($data->accesstime); ?>
    <br />

    <b><?php echo CHtml::encode($data->getAttributeLabel('messagecount')); ?>:</b>
    <?php echo CHtml::encode($data->messagecount); ?>
    <br />


</div>

我应该在 $dataprovider 标准中加入这两个表还是有更好的方法来实现这一点? 仍然掌握 Yii,任何帮助将不胜感激。

【问题讨论】:

    标签: yii dataprovider


    【解决方案1】:

    你可能会在你的代码中错过很多想法,所以我将展示一些你需要的东西:

    在模型中

    在您的模型中,您需要指出存在的关系。

    User 中,您需要定义将此模型链接到代码的关系

    public function relations(){
        return array(
            'codes'=>array(self::HAS_MANY, 'Code', 'createdby'),
        );
    }
    

    Code 你将拥有

    public function relations(){
        return array(
            'author'=>array(self::BELONGS_TO, 'User', 'createdby'),
        );
    }
    

    现在可以在控制器或视图中调用模型时链接模型

    数据提供者

    在数据提供者中,我们会在加载代码时指出需要加载的相关模型:

    $dataProvider=new CActiveDataProvider('Code', array(
        'criteria'=>array(
            'with'=>array('author'),
        ),
    ));
    

    观点

    现在你可以在视图中显示作者:

    <?php echo CHtml::encode($data->author->getAttributeLabel('username')); ?>:</b>
    <?php echo CHtml::encode($data->author->username); ?>
    

    【讨论】:

    • 对不起,我忘了说我是从gii工具生成的模型代码模型上的关系()是:public function relations(){return array('createdby' =&gt; array(self::BELONGS_TO, 'TblUser', 'createdby'),);@ 987654332@ 和用户模型上的关系()是:public function relations(){return array('tblCodes' =&gt; array(self::HAS_MANY, 'TblCode', 'createdby'),);},我注意到它指向了错误的文件名。即 TblUser 是用户,而 TblCode 是我的情况下的代码。但让它工作。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2012-09-05
    • 1970-01-01
    • 2011-06-05
    • 1970-01-01
    • 2020-03-29
    • 1970-01-01
    • 1970-01-01
    • 2022-01-13
    相关资源
    最近更新 更多