Laravel – многострочные строки и идентификаторы возврата

Я использую Laravel 4, и мне нужно вставить некоторые строки в таблицу MySQL, и мне нужно вернуть их вставленные идентификаторы.

Для одной строки я могу использовать ->insertGetId() , однако она не поддерживает несколько строк. Если бы я мог хотя бы извлечь идентификатор первой строки, как это делает обычный MySQL, было бы достаточно, чтобы выяснить другие. Есть идеи?

Как предложил пользователь Xrymz, DB::raw('LAST_INSERT_ID();') возвращает первый.

Согласно Schema api insertGetId() принимает массив

public int insertGetId(array $values, string $sequence = null)

Таким образом, вы должны быть в состоянии сделать

DB::table('table')->insertGetId($arrayValues);

Говоря, если вы используете MySQL, вы можете извлечь первый id и вычислить остальное. Существует также DB::getPdo()->lastInsertId(); функции, которые могли бы помочь.

Или, если он вернул последний идентификатор с помощью некоторых из этих методов, вы можете рассчитать его обратно к первому вставленному тоже.

РЕДАКТИРОВАТЬ

Согласно комментариям, мои предложения могут быть неправильными.

Что касается вопроса «что, если строка вставлена ​​другим пользователем между ними», это зависит от механизма хранилища. Если используется механизм с блокировкой уровня стола ( MyISAM , MEMORY и MERGE ), тогда вопрос неупорядочен, так как не может быть двух одновременных записей в таблицу.

Если используется механизм блокировки на уровне строк ( InnoDB ), то другой возможностью может быть просто вставить данные, а затем извлечь все строки некоторым известным полем whereIn() или выяснить блокировку уровня таблицы .

Это поведение mysql last-insert-id

Важный
Если вы вставляете несколько строк с помощью одного оператора INSERT, LAST_INSERT_ID () возвращает значение, сгенерированное только для первой вставленной строки. Причина этого заключается в том, чтобы дать возможность легко воспроизвести тот же оператор INSERT против какого-либо другого сервера.

u можете попробовать использовать много вставки и принять его идентификаторы или после сохранения, попробуйте использовать $ data-> id, который должен быть последним вставленным id.