Laravel在创建Eloquent对象时从空值创建默认对象

Chr*_*ris 5 php laravel eloquent

我正在尝试将对象保存到我正在网站上构建的游戏的数据库中,但我不断收到此错误:

Creating default object from empty value
Run Code Online (Sandbox Code Playgroud)

这是我正在使用的代码:

    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();
    }
Run Code Online (Sandbox Code Playgroud)

错误发生在if语句中.我尝试将其评论出来,然后错误发生在$ item-> game_id = $ game-> id; 线.

我已经var_dumped $ item和$ game,两者都是有效的Eloquent对象.我甚至var_dumped if语句的结果没有问题,所以我不知道发生了什么.

我只是注意到了

var_dump($item->toArray()); die();
Run Code Online (Sandbox Code Playgroud)

就在$ item-> save()之前; 线,它不会抛出任何错误,并告诉我阵列就好了.

那可能是什么问题呢?我想这与保存项目有关,但我根本不理解.

The*_*pha 5

以下行:

$item = ($input['itemIDs'][$key] === 'NA') ? new GameItem() : GameItem::find($input['itemIDs'][$key]);
Run Code Online (Sandbox Code Playgroud)

始终不返回GameItem对象,因此当您尝试使用propertyon NULL值时,会出现此错误.所以,如果你要经常检查$itemNULL使用这样的事情:

if( !is_null($item) && $item->game_id != $game->id ) { continue; }
Run Code Online (Sandbox Code Playgroud)

而不是这个(首先确保$item不是NULL在使用之前$item->game_id):

if( !is_null($item->game_id) && $item->game_id != $game->id ){ continue; }
Run Code Online (Sandbox Code Playgroud)

  • 谢谢.我只是想出了我的问题,实际上并不是这个问题,但是我这样做的方式确实可能导致其他情况出错.我实际上换了!is_null with empty(). (3认同)