Подтвердить что ты не робот

Вернуть новый идентификатор с помощью DB:: insert() в Laravel 4

В Laravel 4, когда вы выполняете DB::insert(), как вы можете получить идентификатор строки, которая только что была вставлена? Аналогично тому, что мы имеем с функцией ->insertGetId(). Причина использования DB::insert() заключается в том, что его сложный PostgreSQL-запрос, который не может быть создан с использованием Fluent.

Пример запроса:

$newId = DB::insert('insert into users (id, name) values (?, ?)', array(1, 'Dayle'));
echo $newId; // returns 1
4b9b3361

Ответ 1

Существует метод insertGetId.

$id = DB::table('users')->insertGetId(
    array('id' => 1, 'name' => 'Dayle Rees')
);

Ответ 2

Если вы посмотрите на Illuminate\Database\ConnectionInterface, вы увидите, как эти функции написаны. К сожалению, DB::insert() возвращает boolean из PDOStatement::execute(), и в данный момент нет DB::insertGetId(). Если это было бы полезно, тогда вы должны запросить его на GitHub.

В то же время вы можете использовать DB::getPdo()->lastInsertId()

Ответ 3

Существует метод insertGetId():

$dataset = array('column_id' => 1, 'name' => 'Dayle');
$column_id = DB::table('users')->insertGetId($dataset,'column_id');

Ответ 4

Если вы попадаете в сложную структуру, лучше использовать Eloquent.

Лучшее, что вам нужно для просмотра документов:

http://laravel.com/docs/eloquent

Ответ 5

Немного опоздал с ответом, но, думаю, для psql лучше всего использовать нативный RETURNING id

Запрос, который работал для меня, был:

DB::select(
    DB::raw('insert into threads (created_at, updated_at) values (?, ?) 
    returning id'), [Carbon::now(), Carbon::now()]
);

Ответ 6

После сохранения данных в БД вы вызываете $insertedId = $user->id;, где $user->save() вызывается перед шагом.

подробнее здесь