Yii 视图中显示外键

通常Yii给视图自动生成的代码如下:

<?php $this->widget(‘zii.widgets.CDetailView’, array(
    ‘data’=>$model,
    ‘attributes’=>array(
        ‘id’,
        ‘field1’,
        ‘field2’,
        ‘field3’,
        ‘field4’,
    ),
)); ?>

其中的field1, 2, 3, 4这些是table的字段,如果这些字段是普通的字段,但是如果是一个外键,那么就会显示一个数值,但是只不是我们希望的,比如这个外键是指向角色的表,我们是希望显示角色的具体名字,但是显示是1, 2, 3这些数字。

对于这个问题,有2个解决办法,一个是直接使用外键的数值,查询对应的表,这个例子中就是查询角色表,然后把对应的名字,赋给这个字段:

<?php

$role = UserRole::model()->findByPk($model->field1); //假设这里的field1就是UserRole的主键

$model->field1 = $role->name;

$this->widget(‘zii.widgets.CDetailView’, array(
    ‘data’=>$model,
    ‘attributes’=>array(
        ‘id’,
        ‘field1’,
        ‘field2’,
        ‘field3’,
        ‘field4’,
    ),
)); ?>

第二种方法就是利用Yii提供给我们的关系数据表的对象关联,关于如何建立关联关系,请参考我的另外一篇文章:

一步一步学Yii开发(四) – 关联数据表的访问

<?php $this->widget(‘zii.widgets.CDetailView’, array(
    ‘data’=>$model,
    ‘attributes’=>array(
        ‘id’,
        array(‘label’=>’role’, ‘value’=>$model->role0->name),
        ‘field2’,
        ‘field3’,
        ‘field4’,
    ),
)); ?>

上面把field1换成了

array(‘label’=>’Role’, ‘value’=>$model->role0->name),

label就是你想要显示的那个列的名字,通常我们会和模型中attributeLabels()中定义的保持一致,如果你想要换另外名字就是这里使用label定义一个,如这里我们使用Role。

通常是一致,就用name

array(‘name’=>’role’, ‘value’=>$model->role0->name),

这种方式就要求你定义的name,上例中是role要和model的字段一致。

版权所有,禁止转载. 如需转载,请先征得博主的同意,并且表明文章出处,否则按侵权处理.

    分享到:

Leave a Reply

Your email address will not be published. Required fields are marked *