在Laravel 4中使用DB :: insert()返回新的id

时间:2013-04-05 19:37:29

标签: laravel laravel-4

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

示例查询:

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

6 个答案:

答案 0 :(得分:42)

有一个insertGetId方法。

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

答案 1 :(得分:39)

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

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

答案 2 :(得分:9)

insertGetId()方法,如下所示:

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

答案 3 :(得分:0)

如果你进入复杂的结构,最好使用Eloquent。

您需要审核的最佳文档:

http://laravel.com/docs/eloquent

答案 4 :(得分:0)

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

最适合我的查询是:

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

答案 5 :(得分:-3)

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

更多信息here