在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
答案 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)
答案 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