34

在 Laravel 4 中,当您执行 a 时DB::insert(),如何获取刚刚插入的行的 ID?与我们的功能类似->insertGetId()。使用的原因DB::insert()是它是一个复杂的 PostgreSQL 查询,无法使用 Fluent 构建。

示例查询:

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

6 回答 6

65

有一个 insertGetId 方法。

$id = DB::table('users')->insertGetId(
    array('id' => 1, 'name' => 'Dayle Rees')
);
于 2013-04-05T20:22:29.893 回答
44

如果你看一下,Illuminate\Database\ConnectionInterface你会看到这些函数是如何编写的。不幸的是DB::insert()返回一个布尔值PDOStatement::execute(),目前没有DB::insertGetId()。如果这有用,那么您应该在 GitHub 上请求它。

同时,您应该可以使用DB::getPdo()->lastInsertId()

于 2013-04-05T19:53:37.207 回答
11

有一个insertGetId()方法,如下:

$dataset = array('column_id' => 1, 'name' => 'Dayle');
$column_id = DB::table('users')->insertGetId($dataset,'column_id');
于 2015-07-24T11:20:35.877 回答
4

答案有点晚了,但是我认为对于 psql 最好使用本机RETURNING id

对我有用的查询是:

DB::select(
    DB::raw('insert into threads (created_at, updated_at) values (?, ?) 
    returning id'), [Carbon::now(), Carbon::now()]
);
于 2019-04-20T19:55:32.147 回答
0

如果结构复杂,最好使用 Eloquent。

您需要查看文档的最佳方法:

http://laravel.com/docs/eloquent

于 2013-04-10T12:20:07.420 回答
-2

将数据保存到数据库后,您只需在步骤之前调用$insertedId = $user->id;where即可$user->save()

更多信息在这里

于 2013-12-17T14:42:26.580 回答