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


Yii framework : Display value from relation table in admin form

我有一个由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,
    ));
}

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

'lang.name'

在列数组

<<p> ,第二件事/strong>的搜索()

你需要再加一行

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

也许这行得通

    <?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}'
        ),
    ),
)); ?>