将模型自身加入Yii会导致非对象错误

将模型自身加入Yii会导致非对象错误,yii,yii-relations,Yii,Yii Relations,我有一个带有以下字段的模型: id , name , parent_id 我在这个表中存储了一个机械结构 somw示例记录包括: 1 - fruits - 0 2 - foods - 0 3 - colors - 0 4 - apple - 1 5 - red - 3 6 - meat- 2 在manage(admin)页面的gridview中,我想显示父级名称,而不是其id。 所以我在模型(stuff)中定义了这种关系 鉴于: <?php $this-

我有一个带有以下字段的模型:

id , name , parent_id
我在这个表中存储了一个机械结构

somw示例记录包括:

1 - fruits - 0
2 - foods -  0
3 - colors - 0
4 - apple -  1
5 - red -    3   
6 - meat-    2
在manage(admin)页面的gridview中,我想显示父级名称,而不是其id。 所以我在模型(stuff)中定义了这种关系

鉴于:

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

?>

但我在管理页面上出现“尝试获取非对象的属性”错误。这似乎是因为根专利的父项id为“0”,并且没有id为0的记录

我如何处理这个问题


提前谢谢你

您必须在值表达式中添加检查

array(
    'name'=>'parent.name',
    'value'=>'($data->parent_id)?data->parent->name:""'
)
编辑

为了获得最佳实践,您应该将
parent\u id
留空,而不是输入零。如果不是每次都要使用
$model->parent
访问父级,则必须执行上述检查。同样,对于网格
parent.name
也可以使用,而不是上面提到的

'name',
'parent.name',
array(
    'class'=>'CButtonColumn',
),

你能把你的东西贴出来吗??i、 你的stuff表中有e个字段吗?我在问题的顶部提到了stuff模型字段。你可以创建另一个名为parent的表,并使用parent\u id和parentname字段吗?否所有记录都应该在同一个表中,因为每个记录都可以有一些子记录。但是没有id=0的记录?把它空白,tryI做了,但问题似乎是因为关系。因为错误也显示在查看页面中。
'name',
'parent.name',
array(
    'class'=>'CButtonColumn',
),