Вопрос: Laravel Создание объекта по умолчанию из пустого значения при создании объекта Eloquent


Я пытаюсь сохранить объект в базе данных для игры, которую я создаю на веб-сайте, но я продолжаю получать эту ошибку:

Creating default object from empty value

Вот код, который я использую:

    foreach( $input['items'] as $key=>$itemText ){
        $item = ($input['itemIDs'][$key] === 'NA') ? new GameItem() : GameItem::find($input['itemIDs'][$key]);
        // if updating this item, check that it is assigned to this game
        if( !is_null($item->game_id) && $item->game_id != $game->id ){ continue; }
        $item->game_id = $game->id;
        $item->item = $itemText;
        $item->answer = $input['answers'][$key];
        $item->save();
    }

Ошибка возникает в инструкции if. Я попытался прокомментировать это, а затем ошибка произошла в $ item-> game_id = $ game-> id; линия.

Я var_dumped как $ item, так и $ game, и оба являются действительными Яркими объектами. Я даже var_dumped результат инструкции if без проблем, поэтому я не понимаю, что происходит.

Я просто заметил, что если я это сделаю

var_dump($item->toArray()); die();

прямо перед $ item-> save (); line, он не вызывает никаких ошибок и показывает, что массив просто отлично.

Что может быть проблемой? Я полагаю, что это связано с сохранением предмета, но я его вообще не понимаю.


5


источник


Ответы:


Следующая строка:

$item = ($input['itemIDs'][$key] === 'NA') ? new GameItem() : GameItem::find($input['itemIDs'][$key]);

Всегда не возвращает GameItem объект, поэтому, когда вы пытаетесь использовать property на NULL значение, то появляется эта ошибка. Поэтому вы всегда должны проверить, $item не является NULL используя что-то вроде этого:

if( !is_null($item) && $item->game_id != $game->id ) { continue; }

Вместо этого (сначала убедитесь, что $item не является NULL перед использованием $item->game_id):

if( !is_null($item->game_id) && $item->game_id != $game->id ){ continue; }

5