2010-10-25 192 views
4

你好我正在使用cakePHP 1.3,我無法檢索最後插入的行的ID。我實際上是使用$ this-> Model-> id來檢索最後插入的ID,但我無法獲得該ID。當試圖檢查什麼是返回類型時,它表示爲bool(false),這意味着什麼都不返回。獲取最後一個插入ID

在這裏,我加載了不同的模型在不同的控制器,所以會是這個問題?但即使我加載,我什麼都沒有回來!

$this->loadModel('Contact'); 
$this->Contact->query("insert into contacts(tblContact_firstName,tblContact_lastName,tblContact_company,tblContact_department,tblContact_address,tblContact_country,tblContact_city,tblContact_state,tblContact_zipcode,tblContact_phone1,tblContact_email1) values('$sanitizedFormData[fname]','$sanitizedFormData[lname]','','$sanitizedFormData[company]','$sanitizedFormData[address]','$sanitizedFormData[country]','$sanitizedFormData[city]','$sanitizedFormData[state]','$sanitizedFormData[zip]','$sanitizedFormData[phone]','$sanitizedFormData[email]');"); 

$this->loadModel('Contact'); 
$contactId = $this->Contact->id; 

當我遞歸地打印$ this-> Contact數組時,我發現「id」鍵的值爲空。這就解釋了爲什麼我收到一個空值。

現在給我的情況,我將如何得到最後插入的ID,具體到控制器聯繫?

+0

有可能是一個蛋糕特定功能爲此,但mySQL有'LAST_INSERT_ID()' – 2010-10-25 14:37:23

+0

嗯,我其實是在試圖避免另一個數據庫調用。 – macha 2010-10-25 15:02:09

回答

4

當你使用query()你鬆了很多automagic cakephp提供。改爲使用save()

事實上,在這種情況下你甚至不需要加載聯繫人。您可以使用query()執行當前控制器的任何查詢,甚至保存到任何其他表。

如果您的當前模型與聯繫人($this->CurrentModel->AnotherOne->Contact->save(...))有某種關聯,您也可以避免使用loadModel()

+0

因此,如果我使用保存,那麼我將能夠檢索最後一個插入ID? – macha 2010-10-25 15:45:26

+0

我希望是的。至少我從來沒有檢索過上次插入ID的問題。看看這裏 - http://api13.cakephp.org/class/model#method-ModelgetLastInsertID。 – bancer 2010-10-25 15:50:32

+0

@macha是的,這是save()方法的用法,它會自動設置模型的ID。一般來說,嘗試使用Cake的內置插件;他們自動爲你做了很多方便的事情(比如設置模型ID)。 – 2010-10-25 15:56:57

4

如果這是MySQl,則可以使用「從聯繫人LAST_INSERT_ID()中選擇」查詢來獲取最後的ID。 或只是「SELECT LAST_INSERT_ID()」

對於MSSQL,它是「SELECT @@ IDENTITY」。

雖然這會繞過cakePHP中的任何解決方案,所以可能會有更好的解決方案。

+0

感謝您的評論! – macha 2010-10-25 16:09:50

2

您可以通過

echo $this->ModelName->getLastInsertID(); 

或者得到last inserted record id,你可以使用:

echo $this->ModelName->getInsertID(); 

種這個方法可以位於cake/lib /模型/ model.php找到上線2775

注:,如果你手動運行插入查詢此功能不起作用