在Yii中加入自己的模型会导致非对象错误

时间:2013-06-20 06:38:24

标签: 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。 所以我在模型(东西)中定义了这种关系。

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

并在视野中:

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

?>

但是我在管理页面上得到'试图获取非对象的属性'错误。看起来是因为根权专利,他们的parent_id为'0',并且没有id = 0的记录。

我该如何处理这个问题?

先谢谢你。

1 个答案:

答案 0 :(得分:1)

您必须在值表达式

中添加一个检查
array(
    'name'=>'parent.name',
    'value'=>'($data->parent_id)?data->parent->name:""'
)

修改

为了获得最佳实践,您应该将parent_id留空,而不是将其归零。如果不是每次都想使用$model->parent访问父级,则必须执行上述检查。也可以使用网格parent.name代替上面的网格。

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