Yii - Самостоятельная ссылка

Это моя категория таблицы

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

мой вид сетки yii показывает идентификатор родительской категории вместо имени. Как я могу отобразить имя родительской категории в виде сетки.

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

какие изменения я должен сделать в приведенном выше коде. Благодарю.

2 ответа

Решение

Первый шаг - определить отношение в классе модели:

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. В противном случае вы должны избегать использования анонимной функции

'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;
    }
Другие вопросы по тегам