Yii Relations错误尝试获取非对象的属性

时间:2012-03-25 01:28:48

标签: php mysql yii

我有Cinema table&城市表和我通过id与这个表有关系。当我回显结果时,我有PHP通知“试图获得非对象的属性”

有什么问题?或者我错过了什么?

我的代码: 影院型号

public function relations()
{
    // NOTE: you may need to adjust the relation name and the related
    // class name for the relations automatically generated below.
    return array(
        'countryCode' => array(self::BELONGS_TO, 'TblCountry', 'country_code'),
        'city' => array(self::BELONGS_TO, 'TblCity', 'city_id'),
        'tblCinemaMovies' => array(self::HAS_MANY, 'TblCinemaMovies', 'cinema_id'),
        'tblDays' => array(self::HAS_MANY, 'TblDay', 'cinema_id'),
        'tblShowtimes' => array(self::HAS_MANY, 'TblShowtime', 'cinema_id'),
    );
}

城市模型

public function relations()
{
    // NOTE: you may need to adjust the relation name and the related
    // class name for the relations automatically generated below.
    return array(
        'tblCinemas' => array(self::HAS_MANY, 'TblCinema', 'city_id'),
        'countryCode' => array(self::BELONGS_TO, 'TblCountry', 'country_code'),
    );
}

查看文件:

<?php echo $model->city_id->name; ?>

4 个答案:

答案 0 :(得分:5)

我建议您始终检查关系是否不会返回nullempty array

以下代码适用于HAS_ONEBELONGS_TO关系类型:

$cinema = Cinema::model()->find(); // get a cinema instance, assuming there is at least one row in the database.
$city = $cinema->city; // get the relation 
if ($city !== null) {
    // $city is a valid model
} else {
    // $city is null, the corresponding row does not exist in the database
}

您也可以在不使用新变量的情况下进行此检查(在本例中为$city):

if ($cinema->city!==null) {
    // the relation is available
}

检查关系是否未返回null是避免PHP错误“尝试获取非对象属性”的最佳方法。此外,如果您遇到类似错误,建议使用var_dump()等功能,或者更好的是使用调试器。

另请注意,从relations()函数返回的数组中的数组键是必须访问以获取关系模型的属性:

public function relations() {
    return array(
         'city' => array( ... ),
         // city is the property that has to be accessed
         // Yii's conventions recommend to use 'city_id' for the foreign key column name
    );
}

另请注意,遵循Yii关于命名关系和列的约定以避免对属性和关系使用相同的名称是很好的 - 在这种情况下,关系将不可用并且可能是“尝试访问”之类的错误当玩这种关系时,会弹出一个非对象的属性。

最后一点,当使用HAS_MANYMANY_TO_MANY关系时,即使只有一个模型可用,关系也会返回一个模型数组,如果没有可用模型,则返回一个空数组。

文档中的说明: http://www.yiiframework.com/doc/guide/1.1/en/database.arr#performing-relational-query

答案 1 :(得分:4)

<?php echo $model->city->name; ?>

您必须使用$model->city获取city的相应$model

答案 2 :(得分:2)

因为city_id是一个数组,所以在你的视图文件中,你应该编写像这样的代码

<?php echo $model->city_id[0]->name; ?>

答案 3 :(得分:0)

当city_id被清空或清空时(或外表中不存在该值),会发生该错误。 如果您不确定“city_id”是否存在,可以这样检查:

CHtml::value($model, 'city.name');

这样,您总是可以确保在值为空或清除

时不会出现异常