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

How to get last inserted ids in laravel

我同时插入多行,比如说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();
}

无需每次都插入一行的任何其他好方法。

如果你真的需要所有插入的ID

$dataArray = [
    ['name' => 'ABC'],
    ['name' => 'DEF']
];

$ids = [];

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

}

要通过大量插入获取所有 id 我认为好的方法是首先获取 table 中的最后一个 id,进行大量插入并获取最后一个 id。理论上它们必须跟随,除非有来自另一个连接的插入。为避免解决方案是 transaction.

更新

同时阅读 documentation

您可以执行以下操作:

$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();