Yii框架:以管理形式显示关系表中的值

时间:2014-08-18 04:23:52

标签: php yii

我有一个由gii创建的admin.php,其中有一个表格列'lang_id'与表'lang'的主键'id'有关。

我应该在列数组中添加什么?我想我应该使用“Lang.name”但它不起作用。

保护/视图/ MainMenu的/ admin.php的

<?php $this->widget('zii.widgets.grid.CGridView', array(
    'id'=>'mainmenu-grid',
    'dataProvider'=>$model->search(),
    'filter'=>$model,
    'columns'=>array(
        'menu_id',
        'Lang.name',   // I want this column display the name of Language, instead of lang_id
        'name',
        'remark',
        array(
            'class'=>'CButtonColumn',
            'template'=>'{update}'
        ),
    ),
)); ?>

保护/模型/ Mainmenu.php

public function relations(){
    return array(
        'lang'=>array(self::HAS_ONE, 'Lang', 'lang_id')
    );
}

public function search(){
    $criteria=new CDbCriteria;

    $criteria->compare('id',$this->id,true);
    $criteria->compare('menu_id',$this->menu_id);
    $criteria->compare('lang_id',$this->lang_id);
    $criteria->compare('name',$this->name,true);
    $criteria->compare('sorting',$this->sorting);
    $criteria->compare('remark',$this->remark,true);

    return new CActiveDataProvider($this, array(
        'criteria'=>$criteria,
    ));
}

2 个答案:

答案 0 :(得分:0)

关系名称为lang。而在columns数组中,您使用了Lang(大写为l)。  所以你必须这样做

'lang.name'

列数组

搜索()

中的

和第二件事

您需要再添加一行

$criteria->with = array(
'lang'
);

答案 1 :(得分:0)

也许这可以工作

    <?php $this->widget('zii.widgets.grid.CGridView', array(
    'id'=>'mainmenu-grid',
    'dataProvider'=>$model->search(),
    'filter'=>$model,
    'columns'=>array(
        'menu_id',
        array(
            'name'=>'Lang',
            'value'=>'$data->lang->name',
        ),
        'name',
        'remark',
        array(
            'class'=>'CButtonColumn',
            'template'=>'{update}'
        ),
    ),
)); ?>