asp+mssql insert新id_3分钟短文 | Laravel模型获取最后一条插入记录的ID编号

引言

接着我们的Laravel内容讲解,本篇讲一讲如何在模型创建新的数据条目后,获取条目的ID编号。这样在需要实时返回数据ID的场景下比较节约时间,不需要二次查询。

bc8dafba278d7d8a430cfc0f1f5b2eaa.png

学习时间

为了模拟实际编程情况,我们使用以下代码。比如有一个CRM系统,需要用户输入上报公司信息之后,通过API接口返回提示信息。

ad91eb6895bda66e8353adceb59372aa.png

代码比较简单,知识将 request 的 input 内容复制给 Company 模型的属性,然后调用 save 方法将数据存入。

那么,如果想要获取存入后数据条目的ID,如何返回呢?

其实,save 方法本身就是链式调用的,会返回当前的 Company 模型对象。直接调用属性值即可:

$data->id;

封装到 Response 响应体内:

return Response::json(array('success' => true, 'last_insert_id' => $data->id), 200);

上面的写法自然是对的,返回的是当前写入的条目的ID。但是,如果是并发的系统,或者在流程处理中,没有使用 Company 模型进行数据操作,而是 DB::statement,DB::insert 这些,获取到的,可就不是最后的ID了。

兼容的写法,需要考虑多用户并发操作,以及数据更新源不同的情况。那么需要使用独立的方式:

DB::getPdo()->lastInsertId();

这样就可以了,基本上不会出错。

非标准写法

上一节中,如果你的应用程序设定为必须在模型内插入数据,那么使用属性获取最后的ID,是可以的。但是不能保证绝对没错。lastInsertId() 函数正好中立而稳定。

说了标准写法,再说一种非标准,也不是最佳实践的代码,给各位提个醒:

$id = DB::table('users')->insertGetId([    'email' => 'john@example.com',    'votes' => 0]);

这样的写法一时爽,bug调试火葬场!出故障的时候,你连 user 表的字段在什么时间,由那段程序触发的都定位不到。

写在最后

本文通过3个写法,演示了获取最近插入条目的数据库ID。我们提倡 lastInsertId() 方式,独立处理;坚决不提倡“非标准写法”,那将会是应用程序的巨大的坑。

Happy coding :-)

我是 @程序员小助手 ,持续分享编程知识,欢迎关注。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值