程序员小助手 | Laravel模型获取最后一条插入记录的ID编号,3分钟短文
引言
接着我们的Laravel内容讲解 , 本篇讲一讲如何在模型创建新的数据条目后 , 获取条目的ID编号 。 这样在需要实时返回数据ID的场景下比较节约时间 , 不需要二次查询 。
文章图片
学习时间
为了模拟实际编程情况 , 我们使用以下代码 。 比如有一个CRM系统 , 需要用户输入上报公司信息之后 , 通过API接口返回提示信息 。
文章图片
代码比较简单 , 知识将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分钟短文】我是@程序员小助手 , 持续分享编程知识 , 欢迎关注 。
- 虎扑足球|执教青岛黄海只待官宣,记者:吴金贵携三助手抵达苏州
- 英雄小助手|TES惨败RNG,369被质疑问题最大,玩家:阿水真就不粘锅?
- 英雄小助手|RNG零封TES,阿布:RNG全面碾压,TES上野发挥不佳
- 荣耀超神小助手|7.28版本改动后的众生相,芈月登上世冠赛场,公孙离、刘邦跌落神坛
- 木木不哭助手|RNG战胜TES保留季后赛晋级希望!网友怀疑TES全队买菠菜
- 妈妈育儿小助手|孩子不是你亲生的,每天笑一笑:你什么时候才会发现
- 工业互联网软件工程专业女生不想做程序员,还可以选择哪些岗位
- 吉雅荣豪|临走时把新员工办公桌擦一遍,老板交5万罚款,程序员被辞退
- 妈妈育儿小助手|每天都要穿纸尿裤喝牛奶,不开心就大哭!,美国33岁“成年巨婴”
- 科技生活大侠 「专利解密」战疫助手!芯海科技片上数字温度传感器