【问题标题】:Eloquent / Laravel: How to get last insert/update ID/instance of updateOrCreate()?Eloquent / Laravel:如何获取 updateOrCreate() 的最后插入/更新 ID/实例?
【发布时间】:2018-04-06 18:36:18
【问题描述】:

标题大多是不言自明的。 Eloquent 有一个方法叫

updateOrCreate()

在此处记录:https://laravel.com/docs/5.5/eloquent#other-creation-methods

在某些情况下,这确实很有用。但是,在完成 updateOrCreate() 之后,我需要更新/创建的对象或其主键或 id。

当然,我可以MyModel::where(...)->first() 并再次提供所有这些数据,但这很笨拙,可能是一些昂贵的请求。

但是updateOrCreate() 只返回 truefalse

有什么想法吗?

【问题讨论】:

标签: php laravel eloquent upsert laravel-5.5


【解决方案1】:

该方法将返回创建或更新对象的 ID,所以只需这样做:

$object = Model::updateOrCreate(['name' => 'John'], ['age' => 25]);

$id = $object->id;

【讨论】:

  • 其实你是对的,好像我有一个自定义函数,但没有感谢。
  • 方法好像总是返回对象?
【解决方案2】:

查询最后一个

$lastRecord = MyModel::last();

或者

$lastRecord = MyModel::orderBy('id', 'DESC')->first();

【讨论】:

  • 这并不总能为您提供正确的记录,假设您有一个 40 行的表,updateOrCreate 方法更新 id 20,以上都不会返回更新的记录。上述方法只有在创建新记录时才有效。
  • 是的,你是对的,如果你使用时间戳,你必须使用updated_at。否则没有其他办法(除非你像 Alexey 说的那样保存 id。我认为问题是关于不同的请求。
猜你喜欢
  • 2014-01-31
  • 2015-03-08
  • 2016-08-15
  • 2019-05-27
  • 2020-05-08
  • 2016-10-24
  • 2016-06-01
相关资源
最近更新 更多