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;
}