如何使用 Eloquent::insert() 获取最后插入的 id

Posted

技术标签:

【中文标题】如何使用 Eloquent::insert() 获取最后插入的 id【英文标题】:How to get last inserted id using Eloquent::insert() 【发布时间】:2016-08-15 23:17:47 【问题描述】:

我在 laravel 5 中像这样插入批量插入:

$data = array(
    array('name'=>'Jack', 'age'=>'24'),
    array('name'=>'Tom', 'age'=>'37'),
    //...
);

Users::insert($data);

知道如何获取最后插入的 id 吗?

【问题讨论】:

最简单的方法... $data = array(array('name'=>'Jack', 'age'=>'24'), array('name'=>'Tom' , '年龄'=>'37'), //... ); foreach($data as $user) $u = Users::create($user); $u->保存(); $lastId = $u->id; 回声 $lastId; 澄清一下,您想要最后插入的 id 还是插入数据的所有 id? 【参考方案1】:

因此,批量插入数据时不能使用insertGetId()。所以如果你想保持数据库的完整性,你可以这样做:

$lastRow = array_pop($data); // Cutting off last item from an array

Users::insert($data);
$lastId = Users::insertGetId($lastRow);

我知道这是一个非常愚蠢的解决方案,它会创建 2 个查询而不是一个,但如果你找不到更好的,你可以使用它。

替代方案

你也可以试试这个:

$lastId = DB::select('select last_insert_id()');

这可以工作,it shouldn't brake DB integrity:

对于 LAST_INSERT_ID(),最近生成的 ID 保存在 服务器基于每个连接。不会被别人改变 客户。如果您更新另一个 AUTO_INCREMENT 它甚至不会更改 具有非魔术值的列(即,非 NULL 值和 不是 0)。

【讨论】:

【参考方案2】:

两个都可以

使用 Eloquent 模型

$user = new Reports();        
$user->email= 'johndoe@example.com';  
$user->save();
$lastInsertId = $user->id;

或者

使用查询生成器

 $lastInsertId = DB::table('reports')->insertGetId(['email' => 'johndoe@example.com']);

【讨论】:

操作者特别要求提供一个使用大量插入的示例insert()

以上是关于如何使用 Eloquent::insert() 获取最后插入的 id的主要内容,如果未能解决你的问题,请参考以下文章

AI写作《如何利用 RPA 实现自动化获客?》

如何在php中获得下个月的同一天

从一个触发器,如何找出谁修改了表X上的数据,同时该用户从一个通用的dbuser登录,但从用户表获得了权利

如何控制哪个等待线程获得下一个锁?

etherscan如何获​​得区块链编译代码?

jsp页面如何获js中if语句的变量值