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

时间:2016-02-20 09:20:56

标签: php laravel laravel-5.2

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

任何其他好的方法,每次都不插入单行。

2 个答案:

答案 0 :(得分:7)

您可以执行以下操作:

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

答案 1 :(得分:5)

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

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

$ids = [];

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

}

为了获得大量插入的所有id,我认为好的方法是首先获取表中的最后一个id,进行大量插入并获得最后一个id。理论上他们必须遵循,除非从另一个连接插入。为避免解决方案是 transaction

<强>更新

另请阅读documentation