Ответ 1
Существует метод insertGetId.
$id = DB::table('users')->insertGetId(
array('id' => 1, 'name' => 'Dayle Rees')
);
В 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
Существует метод insertGetId.
$id = DB::table('users')->insertGetId(
array('id' => 1, 'name' => 'Dayle Rees')
);
Если вы посмотрите на Illuminate\Database\ConnectionInterface
, вы увидите, как эти функции написаны. К сожалению, DB::insert()
возвращает boolean из PDOStatement::execute()
, и в данный момент нет DB::insertGetId()
. Если это было бы полезно, тогда вы должны запросить его на GitHub.
В то же время вы можете использовать DB::getPdo()->lastInsertId()
Существует метод insertGetId()
:
$dataset = array('column_id' => 1, 'name' => 'Dayle');
$column_id = DB::table('users')->insertGetId($dataset,'column_id');
Если вы попадаете в сложную структуру, лучше использовать Eloquent.
Лучшее, что вам нужно для просмотра документов:
Немного опоздал с ответом, но, думаю, для psql лучше всего использовать нативный RETURNING id
Запрос, который работал для меня, был:
DB::select(
DB::raw('insert into threads (created_at, updated_at) values (?, ?)
returning id'), [Carbon::now(), Carbon::now()]
);
После сохранения данных в БД вы вызываете $insertedId = $user->id;
, где $user->save()
вызывается перед шагом.
подробнее здесь