1

这是我的类别表

id category  parent_category_id
1  animal      NULL
2  vegetable   NULL
3  mineral     NULL
4  doggie      1
5  potato      2
6  hunting     4

我的 yii 网格视图显示父类别 ID 而不是名称。如何在网格视图中显示父类别名称。

<?php $this->widget('zii.widgets.grid.CGridView', array(
    'id'=>'category-grid',
    'dataProvider'=>$model->search(),
    'filter'=>$model,
    'columns'=>array(
        'id',
        'category',
        'parent_category_id',
        array(
            'class'=>'CButtonColumn',
        ),
    ),
)); ?>

我必须在上面的代码中进行哪些更改。谢谢。

4

2 回答 2

1

第一步 - 在模型类中定义关系:

public function relations()
{
    return array(
        'parent'=>array(self::BELONGS_TO, 'Category', 'parent_category_id'),
    );
}

其中Category- 是 AR 模型类的名称,parent_category_id- 引用自身的外键。

第 2 步 - CGridView,columns属性:

...
'columns'=>array(
    'id',
    'category',
    array(
        'name'=>'Parent category', // col title
        'value'=>function (Category $data){
            if($data->parent_category_id)
                return $data->parent->category; // "parent" - relation name, defined in "relations" method 

            return "-= root category =-";


        }
    ),
)
...

注意:以上代码需要php版本>=5.3。否则你必须避免使用匿名函数

于 2013-09-04T10:36:06.290 回答
0
'columns'=>array(
 .....
  array('name'=>'id','value'=>'$data->Category->name'),
 )

或在调用getCategoryName()中创建函数并检索名称

'columns'=>array(
 .....
  array('name'=>'id','value'=>'$data->getCategoryName()'),
 )

 public function getCategoryName()
    {
       $equery= Category::model()->find("id=$this->id"); 
       $cnm=$equery['Category'];
       return $cnm;
    }
于 2013-09-04T07:21:28.780 回答