laravel模型查找现有ID返回null

时间:2018-10-12 13:28:06

标签: php laravel activerecord model laravel-5.6

我正面临针对现有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进行检查。

7 个答案:

答案 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';