如何使用 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的主要内容,如果未能解决你的问题,请参考以下文章