【问题标题】:laravel model find return null for existing idlaravel 模型查找现有 id 的返回 null
【发布时间】:2018-10-12 13:28:05
【问题描述】:

我正面临现有 id 的模型查找问题,它返回 null 并显示以下错误。

从空值创建默认对象

这个 id 存在于数据库中,但它仍然返回 null。

$model = Shoppinglist::find($id);
$model->buy_it = 1;
$model->qty= $qty;
$model->save();

当我将列 qty 类型从 into(10) 更改为浮动时,这个问题就开始了,因为我想在 db 列中保存浮动值。 我在这个问题上花了几个小时,但仍然无法解决。 我通过提供静态 id 值代替变量 $id 进行了检查。 我通过将 $id 转换为 int 来检查。

【问题讨论】:

  • 所以如果你 dd($model);在 find 语句之后你得到 null?
  • dd($model) 显示什么?
  • dd($model) 返回 null。
  • echo $id 显示什么?
  • 为此我们需要您的数据库架构和模型代码。

标签: php laravel activerecord model laravel-5.6


【解决方案1】:

在使用find($id)之前,你应该检查你表中的键是主键,否则你可以使用where('id', $id)->get()

【讨论】:

    【解决方案2】:

    在这个问题中有需要考虑的案例。

    我的建议首先是在模型中显式声明主键:

    protected $primaryKey = 'shopping_list_id'; // or 'id' depending on your specified primary key
    

    【讨论】:

      【解决方案3】:

      检查你是否使用了软删除特征并且你的deletedat列在db中为空,并确保你已将id作为表中的主键和最后的位置

      protected $table = "shopping_lists"
      

      在您的 ShoppingList 模型文件中

      或者检查你的模型名和表名是否匹配

      【讨论】:

        【解决方案4】:

        可能$id 的值被视为字符串,因此请尝试使用intval()

        $model = Shoppinglist::find(intval($id));
        $model->buy_it = 1;
        $model->qty= $qty;
        $model->save();
        

        或者如果您需要新方法,您可以尝试使用first()findOrFail() 而不是find()

        $model = Shoppinglist::first(intval($id));
        $model = Shoppinglist::findOrFail(intval($id));
        

        【讨论】:

          【解决方案5】:

          在大多数情况下,用户创建不同的主键,例如 shoppinglist_id 而不是 id,然后发现功能不起作用,您必须添加

          protected $primaryKey = 'shoppinglist_id';
          

          您必须在模型 Shoppinglist 中添加上述代码

          或者

          $shopping = Shoppinglist::where('table_priamry_key', $id)->first();
          dd($shopping); 
          

          如果您使用的是软删除,则在获取结果的位置添加软件删除

          【讨论】:

            【解决方案6】:

            希望这对以后遇到此问题的人有所帮助。我遇到了与模型的主键相同的问题。我设置了$primaryKey = another_field,它没有指向我试图获取的id。所以我所做的只是设置$primaryKey = 'id',一切都很酷。快乐编码...

            【讨论】:

              【解决方案7】:

              如果您在 MODEL 中没有设置 $primaryKey 属性,它将假定 id

              find() 方法通过它的 $primaryKey 属性找到模型。 所以如果你想改变 Eloquent 中的默认主键,你需要这个。

              protected $primaryKey = 'email';
              

              【讨论】:

                【解决方案8】:

                检查您是否使用softdeletes 检索您正在检索的行可能已被删除。发生在我身上,得到了同样的错误。

                【讨论】:

                猜你喜欢
                • 2014-11-26
                • 2021-01-25
                • 2016-04-20
                • 2019-02-02
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2021-05-29
                相关资源
                最近更新 更多