我正在尝试将对象保存到我正在网站上构建的游戏的数据库中,但我一直收到此错误:
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,两者都是有效的Eloquent对象。我甚至var_dumped if语句的结果没有问题,所以我不知道发生了什么。
我注意到我是否
var_dump($item->toArray()); die();
在$ item-> save()之前;一行,它不会抛出任何错误,并向我展示阵列就好了。
那可能是什么问题?我想这与保存项目有关,但我根本不理解。
答案 0 :(得分: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; }