Как узнать, когда мое отношение возвращает объект, а когда массив?

Третий матч в google для «C ++ slicing» дает мне эту статью в Википедии http://en.wikipedia.org/wiki/Object_slicing и этот (нагретый, но первые несколько сообщений определяют проблему ): http://bytes.com/forum/thread163565.html

Таким образом, это когда вы назначаете объект подкласса суперклассу. Суперкласс ничего не знает о дополнительной информации в подклассе и не имеет места для его хранения, поэтому дополнительная информация получает «отрезанный».

Если эти ссылки не дают достаточной информации для «хороший ответ», пожалуйста, отредактируйте свой вопрос, чтобы сообщить нам, что еще вы ищете.

2
задан HCK 24 March 2019 в 17:24
поделиться

1 ответ

Класс Model реализует интерфейс Arrayable, это означает, что вы можете получить доступ к атрибутам также, как если бы это был array, вот почему эта работа:

$reply->thread['title'];

Когда вы используйте отношение BelongsTo, ожидаемое возвращение объекта (экземпляра вашей модели) или null в случае, если это отношение не установлено, поэтому вы можете использовать «магические методы» для доступа к таким атрибутам: [ 1119]

$reply->thread // an object
$reply->thread->title // getting attributes using magic methods

Но что происходит, когда отношения не установлены? что ж, отношения вернутся null, поэтому, когда вы сделаете это:

$reply->thread->title

Это вызовет ошибку:

Попытка получить заголовок свойства не-объекта [1122 ]

Поскольку вы пытаетесь получить доступ к атрибуту 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();
});

Проверьте , эта статья связана с этой проблемой.

0
ответ дан HCK 24 March 2019 в 17:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: