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

dauxcl2d  于 2023-05-27  发布在  PHP
关注(0)|答案(1)|浏览(239)

我试图将一个对象保存到数据库中,用于在网站上构建的游戏,但我一直收到此错误:

  1. Creating default object from empty value

下面是我使用的代码:

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

错误发生在if语句中。我尝试注解掉它,然后错误发生在$item->game_id = $game->id;线。
我已经var_dump了$item和$game,它们都是有效的Eloquent对象。我甚至var_dump了if语句的结果,没有任何问题,所以我不知道发生了什么。
我只是注意到如果我这么做

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

$item->保存();行,它不会抛出任何错误,并向我显示数组刚刚好。
那会是什么问题呢?我想这和保存物品有关,但我一点也不明白。

daolsyd0

daolsyd01#

下面这一行:

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

始终不返回GameItem对象,因此当您尝试在NULL值上使用property时,会出现此错误。因此,您应该始终使用以下方法检查$item是否不是NULL

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

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

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

相关问题