2013-11-26 70 views
-1

我想在appModel中編寫一個函數,該函數返回我想要的每個模型的下一個自動增量主ID。例如在UserController中,我使用$this->user->nextId()。 我知道,接下來返回自動遞增主ID查詢:在cakephp中獲取下一個自動增量ID

SELECT Auto_increment FROM information_schema.tables WHERE table_name='table-name' AND table_schema='db-name' 
+9

你爲什麼要這樣?這樣的代碼是不可靠的。考慮在您的網站上的兩個用戶在同一個。兩者同時檢索auto_inc,得到(說)42,並且都使用它。其中一個會因主鍵違規而丟失。這是一場比賽,有人會輸。 –

+0

您應該學習如何正確使用框架。然後你會發現你永遠不需要這個功能。除了馬克B提到的:它沒有意義使用它。 – mark

+0

是的你是對的,但我需要它。 – beautifulmind

回答

0

http://book.cakephp.org/2.0/en/models/retrieving-your-data.html#model-query

所以,你可以這樣做:

public function nextId() { 
    $result = $this->User->query("SELECT Auto_increment FROM information_schema.tables AS NextId WHERE table_name='table-name' AND table_schema='db-name'"); 
    return $result[0]['NextId']['Auto_increment']; 
} 

您可能需要編輯return語句。我不確定這是否會用到它的確切格式。

然而正如其他人所說,這不是你應該做的事情。

+0

兩個訪問者同時調用此函數將意味着其中一個會收到ID錯誤!使用這個:http://stackoverflow.com/a/38106365/3022387 – flowtron