如何在Laravel中获取最后插入的ID

3

我正在同时插入多行数据,例如2行

$multiple_rows = [
    ['email' => 'taylor@example.com', 'votes' => 0],
    ['email' => 'dayle@example.com', 'votes' => 0]
];
DB::table('users')->insert($multiple_rows);

我该如何获取那些插入的 ID 呢?

目前我的做法是这样的。

foreach($multiple_rows as $row){
  DB::table('users')->insert($row);
  $record_ids[] = DB::getPdo()->lastInsertId();
}

有没有其他好的方法可以做到这一点,而不需要每次插入一行。


您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - James
尝试使用 insertGetId() - Renjith V R
@James 不,行数是动态的,可以是1-20。 - Believe It or Not
@Yahoo,你能给我提供insertGetId()多行插入的完整语法吗?实际上我已经尝试了,但是它一直报错:( - Believe It or Not
2个回答

8
您可以像以下这样做:

您可以采取以下措施:

$latestUser = DB::table('users')->select('id')->orderBy('id', 'DESC')->first();

$multiple_rows = [
    ['email' => 'taylor@example.com', 'votes' => 0],
    ['email' => 'dayle@example.com', 'votes' => 0]
];

DB::table('users')->insert($multiple_rows);

$users = DB::table('users')->select('id')->where('id', '>', $latestUser->id)->get();

如果有人并行执行相同的请求会怎样呢?最后一个请求将会收到比预期更多的ID,包括并行请求插入的ID。 - JustAMartin
大多数用例都由生成队列过程的内部锁定方法覆盖,但处理它们的其他方式还有很多。这将是一个单独的问题。 - user2094178

5
如果您确实需要所有插入的ID,请使用以下代码:
$dataArray = [
    ['name' => 'ABC'],
    ['name' => 'DEF']
];

$ids = [];

foreach($dataArray as $data)
{
     $ids[] = DB::table('posts')->insertGetId($data);

}

为了获取所有id并进行大规模插入,我认为好的方法是先获取表中的最后一个id,然后进行大规模插入并获取最后一个id。理论上它们必须按顺序进行,除非有另一个连接进行了插入。为了避免这种情况,解决方案是使用事务

更新

还需阅读文档


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接