在listview中显示相关的表列名称

时间:2013-04-04 10:35:02

标签: yii dataprovider

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

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

**tbl_user**
id (PK)
username
password

我想在listview中显示以下内容

  • id(tbl_code.id)
  • accesscode
  • 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,任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

您可能会在代码中错过很多想法,因此我会展示您需要的一些内容:

在模型中

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

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); ?>