程序员小助手 | Laravel模型获取最后一条插入记录的ID编号,3分钟短文

引言
接着我们的Laravel内容讲解 , 本篇讲一讲如何在模型创建新的数据条目后 , 获取条目的ID编号 。 这样在需要实时返回数据ID的场景下比较节约时间 , 不需要二次查询 。
程序员小助手 | Laravel模型获取最后一条插入记录的ID编号,3分钟短文
文章图片
学习时间
为了模拟实际编程情况 , 我们使用以下代码 。 比如有一个CRM系统 , 需要用户输入上报公司信息之后 , 通过API接口返回提示信息 。
程序员小助手 | Laravel模型获取最后一条插入记录的ID编号,3分钟短文
文章图片
代码比较简单 , 知识将request的input内容复制给Company模型的属性 , 然后调用save方法将数据存入 。
那么 , 如果想要获取存入后数据条目的ID , 如何返回呢?
其实 , save方法本身就是链式调用的 , 会返回当前的Company模型对象 。 直接调用属性值即可:
$data->id;
封装到Response响应体内:
returnResponse::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()方式 , 独立处理;坚决不提倡“非标准写法” , 那将会是应用程序的巨大的坑 。
Happycoding:-)
【程序员小助手 | Laravel模型获取最后一条插入记录的ID编号,3分钟短文】我是@程序员小助手 , 持续分享编程知识 , 欢迎关注 。