我正在尝试使用Laravel 5.6将值插入到postgresql 10中。我有一张这样的桌子:
test
----
test_id (identity generated by default, primary key)
test_name
我的问题是获取刚刚插入的test_id
。
$test_id = \DB::connection('pgsql')->insert(
'INSERT INTO test (test_name) VALUES (?) RETURNING test_id',
['hello world']
);
如果我打印出$test_id
,则会打印1
。我是在一个循环中做这个,有不同的名字。一切都正确插入,但即使数据库中test_id
为6
,我也会继续1
。
如何在Laravel中正确返回$test_id
?
答案 0 :(得分:2)
可以使用insertGetId
,例如:
$id = DB::table('users')->insertGetId(
[ 'name' => 'first' ]
);
或试试这个:
$id = DB::getPdo()->lastInsertId();
在你的情况下,这有效:
$id = DB::connection('pgsql')
->table('test')
->insertGetId(['test_name' => 'hello world'], 'test_id');
https://laravelcode.com/post/laravel-55-get-last-inserted-id-with-example
答案 1 :(得分:1)
有点老,但是我只是以一种有趣的方式解决了这个问题,想分享我的答案。
有点奇怪,但是关键是使用select和selectOne laravel函数:
// Single row insertion
$insertion = DB::selectOne("INSERT INTO cities (user_uuid, postal_code) VALUES (?, ?) RETURNING uuid", [$name, $postal_code]);
echo $insertion->uuid;
// Multiple rows insertion
$insertion = DB::select("INSERT INTO cities (user_uuid, postal_code) VALUES (?, ?), (?, ?) RETURNING uuid", [$name, $postal_code, $name, $postal_code]);
foreach($insertion as $city) {
echo $city->uuid;
}
玩得开心:)