2013-04-05 55 views
24

在Laravel 4中,當您執行DB::insert()時,如何獲取剛剛插入的行的ID?類似我們的功能->insertGetId()。使用DB::insert()的原因是它是一個複雜的PostgreSQL查詢,無法使用Fluent進行構建。在Laravel 4中返回帶有DB :: insert()的新ID

實例查詢:

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

回答

35

如果你看一看Illuminate\Database\ConnectionInterface可以看到這些功能是如何寫的。不幸的是,DB::insert()PDOStatement::execute()返回布爾值,目前沒有DB::insertGetId()。如果這會有用,那麼你應該在GitHub上請求它。

在此同時,你應該能夠使用DB::getPdo()->lastInsertId()

+0

感謝菲爾,這是實際問題的答案! – jonlink 2017-09-11 20:15:17

40

有一個insertGetId方法。

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

謝謝,但我需要將'RAW' SQL語句傳遞給我的數據庫,所以使用Fluent的'insertGetId'不會真的有所幫助。 – Nyxynyx 2013-04-05 20:35:49

+0

啊對不起,我錯過了那部分。 – Blessing 2013-04-05 21:15:55

+0

不錯,有幫助。謝謝。 – CodeGuru 2014-02-02 15:20:47

0

如果你在複雜的結構,最好使用雄辯。你需要審覈文檔

最棒的地方:

http://laravel.com/docs/eloquent

+0

在查詢條款中,您可以對Eloquent做些什麼,但您無法使用Fluent做到這一點,通常使用Eloquent更方便。 – 2013-04-10 14:27:04

+0

當然,你可以做所有。但基於類的數​​據庫結構是有意義的,並且容易在將來重構.. – 2013-04-11 10:48:10

+0

是的,但並非真正的答案。在我的情況下(也許是OP的)Eloquent將不得不做很多的數據庫調用,我可以在一個SQL查詢中完成相同的操作。 – jonlink 2017-09-11 20:17:55

-1

將數據保存到數據庫後,您只需撥打$insertedId = $user->id;其中$user->save()的步驟之前調用。

更多信息here

+0

看來你沒有看過這個問題。 – jonlink 2017-09-11 20:18:19

7

有一個insertGetId()方法,如下所示:

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