2010-08-18 57 views
59

我怎樣才能得到最後的插入ID與教條2 ORM?我沒有在教條的文件中找到這個,這甚至有可能嗎?獲取教義2的最後一個插入ID?

+0

試試這個,在你插入的結尾返回id ...像return $ this-> id; – Manie 2010-08-18 06:13:53

回答

140

我只好用這種沖洗後得到最後插入ID:

$em->persist($user); 
$em->flush(); 
$user->getId(); 
+2

不能使用它。獲取錯誤在「我的項目」中調用未定義的方法Test \ Entity \ Test :: getId() – 2013-06-19 19:40:05

+0

@ noobie-php您需要爲您的Id定義一個公共getter(如果這個私有應該是) – cheesemacfly 2013-08-19 17:04:09

+0

@cheesemacfly :我已經對這個錯誤進行了排序(在我的方案中),當我們因任何原因無法flush()時,一旦成功執行Flush(),getID()開始工作,假設getter和setters在這裏不是問題 – 2013-08-20 16:39:47

9

調用flush()有可能添加大量新的實體,所以心不是真的「lastInsertId」的概念。但是,無論何時生成標識字段,Doctrine都會填充標識字段,因此在調用flush之後訪問id字段將始終包含新「持久化」實體的標識。

29

你可以在調用實體管理器的persist方法後訪問id。

$widgetEntity = new WidgetEntity(); 
$entityManager->persist($widgetEntity); 
$entityManager->flush(); 
$widgetEntity->getId(); 

需要爲了得到這個ID來沖洗。

語法錯誤修復:在$ entityManager-> flush()被調用後添加了分號。

+6

我確實需要刷新以獲取值。堅持是不夠的,因爲在刷新之前,項目實際上並沒有寫入數據庫。 – 2011-04-29 21:14:08

3

有點遲來回答這個問題。但是,

如果它是一個MySQL數據庫

應該$doctrine_record_object->id工作,如果AUTO_INCREMENT在數據庫中,並在你的表定義來定義。

17

如果您使用的不是實體,而是本地SQL如圖here然後如下圖所示,你可能希望得到最後插入的ID:

$entityManager->getConnection()->lastInsertId() 

對於諸如PostgreSQL序列數據庫,請沒有,你可以提供序列名稱作爲lastInsertId方法的第一個參數。

$entityManager->getConnection()->lastInsertId($seqName = 'my_sequence') 

欲瞭解更多信息,看看在GitHub上herehere代碼。

+0

這可能不適用於每個DBMS。例如它不適用於Postgres(由於序列) – 2015-02-01 18:34:17

+0

真棒!我花了數小時尋找這個小片段。 – MikeGA 2015-04-22 21:33:13

+4

@ paul.ago你只需要知道序列的名稱,例如:'lastInsertId('articles_id_seq')' – ChocoDeveloper 2015-04-24 16:33:23