我正面临针对现有ID的模型查找问题,该模型返回null并显示以下错误。
从空值创建默认对象
该ID存在于数据库中,但仍返回null。
$model = Shoppinglist::find($id);
$model->buy_it = 1;
$model->qty= $qty;
$model->save();
当我将数量类型从into(10)更改为float时,此问题开始,因为我想将浮动值保存在db列中。 我在这个问题上花了几个小时,但仍然无法解决。 我通过提供代替变量$ id的静态id值进行检查。 我通过将$ id转换为int进行检查。
答案 0 :(得分:1)
在使用find($id)
之前,应检查表中的键是否为主键,否则可以使用where('id', $id)->get()
。
答案 1 :(得分:0)
检查您是否使用过软删除特性,并且在db中列中的删除为空,并确保已将id作为表中和最后一位的主键
protected $table = "shopping_lists"
在您的ShoppingList模型文件中
或检查您的模型名称和表名称是否匹配
答案 2 :(得分:0)
也许$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));
答案 3 :(得分:0)
此问题中有一些情况需要考虑。
首先,我的建议是在模型中显式声明主键:
protected $primaryKey = 'shopping_list_id'; // or 'id' depending on your specified primary key
答案 4 :(得分:0)
在大多数情况下,用户创建不同的主键,例如shoppinglist_id而不是id,然后发现功能不起作用,您必须添加
protected $primaryKey = 'shoppinglist_id';
您必须在模型购物清单中添加以上代码
或者
$shopping = Shoppinglist::where('table_priamry_key', $id)->first();
dd($shopping);
如果您使用的是软删除,则在获取结果的位置添加软件删除
答案 5 :(得分:0)
希望这对以后遇到困难的人有所帮助。我有同样的问题,该问题源于模型的主键。我设置了$primaryKey = another_field
,它没有指向我试图获取的id
。因此,我所做的只是设置$primaryKey = 'id'
,一切都很棒。编码愉快...
答案 6 :(得分:0)
如果您的 MODEL 中没有设置 $primaryKey 属性,它将假定 id。
find() 方法通过 $primaryKey 属性找到模型。 因此,如果您想更改 Eloquent 中的默认主键,您需要这样做。
protected $primaryKey = 'email';