【问题标题】:Laravel Creating default object from empty value when creating an Eloquent objectLaravel 创建 Eloquent 对象时从空值创建默认对象
【发布时间】:2014-08-05 03:21:44
【问题描述】:

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

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;行。

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

我只是注意到如果我这样做了

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

就在 $item->save(); 之前行,它不会抛出任何错误,并且可以很好地显示数组。

那可能是什么问题?我想这与保存项目有关,但我完全不明白。

【问题讨论】:

    标签: php laravel eloquent


    【解决方案1】:

    下面一行:

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

    始终不返回 GameItem 对象,因此当您尝试在 NULL 值上使用 property 时,会出现此错误。所以你应该经常检查$item 是否不是NULL 使用这样的东西:

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

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

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

    【讨论】:

    • 谢谢。我刚刚发现了我的问题,实际上并不是这样,但确实我这样做的方式在其他情况下可能会导致错误。我实际上用 empty() 替换了 !is_null。
    • 欢迎并 +1,因为您已将其删除但又撤消了该操作 :-)
    猜你喜欢
    • 2017-11-29
    • 2018-07-18
    • 2019-03-14
    • 1970-01-01
    • 2021-05-22
    • 2016-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多