Ошибка отношений Yii Попытка получить свойство необъекта - PullRequest
3 голосов
/ 25 марта 2012

У меня есть таблица Cinema и таблица City, и у меня есть связь с этими таблицами по 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 ]

5 голосов
/ 25 марта 2012

Я рекомендую вам всегда проверять, возвращает ли отношение null или empty array.

Следующий код хорошо работает с типами отношений HAS_ONE и BELONGS_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_MANY или MANY_TO_MANY, отношение возвращает массив моделей, даже если доступна только одна модель, и пустой массив, если ничего не доступно.

Объяснение в документах: http://www.yiiframework.com/doc/guide/1.1/en/database.arr#performing-relational-query

4 голосов
/ 25 марта 2012
<?php echo $model->city->name; ?>

Вы должны использовать $model->city, чтобы получить city из $model.

2 голосов
/ 22 августа 2013

Поскольку city_id - это массив, в вашем файле просмотра вы должны написать код, подобный этому

<?php echo $model->city_id[0]->name; ?>
0 голосов
/ 27 марта 2012

Эта ошибка возникает, когда city_id очищается или обнуляется (или значение не существует во внешней таблице).Если вы не уверены, что «city_id» существует, вы можете проверить его следующим образом:

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

Таким образом, вы всегда будете уверены, что у вас не будет исключения, когда значение пустое или пустое

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...