【问题标题】:Can we use update() with find() in the laravel eloquent?我们可以在 laravel eloquent 中使用 update() 和 find() 吗?
【发布时间】:2021-09-01 21:13:04
【问题描述】:

当我使用 update()find() 和无效的 id

User::find(100)
     ->update(['is_valid' => true])

我收到错误:

错误:在 null 上调用成员函数 update()

但是当我使用update()where 和无效的id

User::where('id', 100)
     ->update(['is_valid' => true])

它按预期返回false。那么当我使用find() 时有什么问题?如何解决?

【问题讨论】:

  • id 100 是否存在于 users 表中。如果不是第二个查询将返回 false
  • 请注意:find() 将返回一个 single 模型实例,其中返回 multiple 集合,因此您不能将 update() 方法与find()update()mass assignment的方法
  • 我的问题是为什么不能在update() 中使用find()?它适用于有效的id,但不适用于无效的id
  • 查询如何对无效 ID 执行更新
  • @Senthur 在这种情况下您需要使用findOrFail(),因为如果find() 不存在,find() 将返回 null,因此您将在下一次查询时出错

标签: laravel eloquent laravel-8


【解决方案1】:

如果你想使用

User::find(100)
     ->update(['is_valid' => true])

这没有错误,你可以像这样使用optional() helper

optional(User::find(100))
     ->update(['is_valid' => true])

参考链接https://laravel.com/docs/8.x/helpers#method-optional


User::find(0) ---> null

如果找到数据,它会重新运行模型实例,如果没有找到它则返回 null,因此您无法将 ->update() 链接到 null,这就是您收到错误的原因

User::where('id', 100) ----> eloquent instnace

它是一个 laravel Eloquent,所以在这里你可以链接尽可能多的函数,这些函数在 eloquent 中可用

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-02-16
  • 1970-01-01
  • 1970-01-01
  • 2017-07-06
  • 1970-01-01
  • 2013-09-10
  • 2019-02-14
相关资源
最近更新 更多