在laravel和postgresql中使用返回插入

时间:2018-05-23 19:03:40

标签: php laravel postgresql laravel-5

我正在尝试使用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_id6,我也会继续1

如何在Laravel中正确返回$test_id

2 个答案:

答案 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;
}

玩得开心:)