Класс Model
реализует интерфейс Arrayable
, это означает, что вы можете обращаться к атрибутам также, как если бы это был array
, вот почему эта работа:
$reply->thread['title'];
Когда выиспользуйте отношение BelongsTo
, это предполагает возвращение объекта (экземпляра вашей модели) или null
, если это отношение не установлено, поэтому вы можете использовать «магические методы» для доступа к таким атрибутам:
$reply->thread // an object
$reply->thread->title // getting attributes using magic methods
Но что происходит, когда отношения не установлены?что ж, отношения вернутся null
, поэтому, когда вы сделаете это:
$reply->thread->title
Это вызовет ошибку:
Попытка получить заголовок свойства не-объекта
Поскольку вы пытаетесь получить доступ к атрибуту title
null
.
Обновление:
Вот где, я думаю, ошибка,В новейшей версии Laravel (на сегодняшний день: Laravel 5.8
) типы ключей первичных ключей изменены с integers
на bigIntegers()
, и это для всех таблиц:
Schema::create('replies', function (Blueprint $table)
{
$table->bigIncrements('id'); // <---- equivalent to bigInteger
$table->integer('user_id')->unsigned;
$table->integer('thread_id')->unsigned;
$table->text('body');
$table->timestamps();
});
ТакВаши внешние ключи должны быть также большими целыми числами, попробуйте это:
Schema::create('replies', function (Blueprint $table)
{
$table->bigIncrements('id');
$table->unsignedBigInteger('user_id'); // <-----------
$table->unsignedBigInteger('thread_id'); // <-----------
$table->text('body');
$table->timestamps();
});
Проверьте эта статья связана с этой проблемой.