Eloquent / Laravel:如何获取updateOrCreate()的最后插入/更新ID或实例?

10
标题已经很清楚了。Eloquent 有一个叫做 updateOrCreate() 的方法,文档在这里:https://laravel.com/docs/5.5/eloquent#other-creation-methods

在某些情况下,这非常有用。但是,在执行updateOrCreate()之后,我需要更新/创建的对象或其主键或其ID。

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

但是,updateOrCreate()仅返回truefalse

有任何想法吗?


1
可能是[Laravel中使用Eloquent获取最后插入ID的](https://dev59.com/d2Ei5IYBdhLWcg3wptl_)重复问题。 - chiliNUT
3个回答

24

该方法将返回已创建或更新对象的ID,所以只需执行以下操作:

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

$id = $object->id;

2
实际上,你是正确的,似乎我想到了一个自定义函数,而没有谢谢。 - Blackbam
这个方法似乎总是返回对象? - Adam

1
$insertid = DB::table('temp_registration_master')->insertGetId($master_detail);

2
请阅读[答案]并[编辑]您的答案,以包含有关此代码实际解决问题的说明。请记住,您不仅要解决问题,还要教育OP和任何未来读者。 - Adriaan

-3

查询最后一个

$lastRecord = MyModel::last();

或者

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

3
这种方法并不能总是得到正确的记录。比如,如果你有一个40行的表格,使用updateOrCreate方法更新了第20行的id,上述两种方法都不能返回被更新的那一行。只有在创建了新记录时,上述方法才能起作用。 - JLeggatt
是的,如果您使用时间戳,您将不得不使用updated_at。否则没有其他方法(除非像Alexey所说的那样保存id)。我认为问题是关于不同请求的。 - Lloople

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接