Я вставляю несколько строк одновременно, скажем, 2 строки
$multiple_rows = [ ['email' => 'taylor@example.com', 'votes' => 0], ['email' => 'dayle@example.com', 'votes' => 0] ]; DB::table('users')->insert($multiple_rows);
Как я могу получить те вставленные идентификаторы.
Я делаю это так, пока.
foreach($multiple_rows as $row){ DB::table('users')->insert($row); $record_ids[] = DB::getPdo()->lastInsertId(); }
Любой другой хороший способ сделать это, не вставляя одну строку каждый раз.
Вы можете сделать что-то вроде следующего:
$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();
Если вам действительно нужны все вставленные идентификаторы
$dataArray = [ ['name' => 'ABC'], ['name' => 'DEF'] ]; $ids = []; foreach($dataArray as $data) { $ids[] = DB::table('posts')->insertGetId($data); }
Чтобы получить идентификатор с массивной вставкой, я думаю, что хороший способ – сначала получить последний идентификатор в таблице, сделать массивную вставку и получить последний идентификатор. Теоретически они должны следовать, если не было вставки из другого соединения. Чтобы избежать решения, это транзакция .
Обновить
Также прочитайте документацию