我知道從db table
中獲取id
的record
在CakePHP
中很容易。我想獲得一個表的「將來」record
的「未來」10,即我將插入一個record
,但在插入之前,我想獲得它的id,在插入完成後它將由db生成(id
是int,自動遞增)。謝謝。CakePHP,從數據庫表中獲取記錄的編號
回答
一個選項是你可以從mysql獲取當前的最大id,然後增加值。如果您有很多操作正在進行,這可能會導致您的網站出現問題。但是,你可以使用:
$this->Model->query("SELECT MAX(id) as max FROM `your_table_name`");
這會讓你該表的最大ID目前那麼你可以做一個+1
另一種選擇是,以獲得ID保存後,再更新記錄用那個ID。例如cakephp爲此提供了一個方法。
$this->Model->getLastInsertID();
$this->Model->updateAll($fields, $conditions)
參考updateAll:http://book.cakephp.org/2.0/en/models/saving-your-data.html#model-updateall-array-fields-array-conditions
SELECT MAX不會工作。如果在您詢問的時間和您使用該ID的時間之間插入了20條記錄,該怎麼辦? – RichardAtHome
是的,我想到了第一個想法,但我不知道它可能會導致一些麻煩。爲什麼它可能會造成麻煩?你能解釋我嗎?而且,在插入之前CakePHP沒有任何功能或東西給我最後一個ID嗎? CakePHP不是以任何簡單的方式支持這種操作嗎?@Sixthpoint – user2387319
像下面解釋的那樣,其他操作在您使用剛插入的ID之前發生。我不知道你會使用它的上下文。插入之前獲取ID的最佳做法並不是真的。但是,如果您沒有其他選項,則應該鎖定表以便不發生其他事務:http://dev.mysql.com/doc/refman/5.0/en/lock-tables.html – Sixthpoint
即使數據庫本身並不知道ID它要使用,直到那一刻保存記錄後。
您不能(在多用戶系統中)事先詢問該ID將會是什麼,因爲在詢問該ID將要發生的時間與您的時間之間可能插入了20個其他記錄插入您的記錄(使用20個記錄之前使用的ID)。這稱爲「競爭條件」。
這裏會發生什麼:
You: DB - what's the next ID please?
DB: (Does a max() on the column) 21!
You: Great! I'll use that!
(meanwhile 20 other records get inserted by other users)
You: Hi DB, I'd like to insert this record using ID 21 like you told me!
DB: Oops - sorry - that ID has already been used :'-(
你不需要提前知道的紀錄。如果您正確構造保存數據並使用CakePHP的saveAccociated()方法,則CakePHP將插入正確的ID作爲所有相關數據的外鍵值。
有一個可預測的ID的唯一方法是自己創建它。請記住 - 它必須是非空且唯一的(主鍵的定義)。
爲自己節省很多未來的主鍵衝突並堅持蛋糕的方法:-)
- 1. 從行中的表中獲取數據庫中的記錄
- 2. 在cakephp的視圖文件中獲取數據庫記錄值
- 3. 從10個表中獲取來自MySQL數據庫的記錄
- 4. 從cakephp v1.3中的數據庫中僅獲取「已啓用」記錄
- 5. 從數據表中的選定記錄獲取記錄集
- 6. 刪除數據庫中的記錄cakephp
- 7. 獲取從數據庫表中記錄爲一個月明智
- 8. 從SQLite數據庫獲取最新記錄的問題表
- 9. 從員工表中提取偶數編號的記錄
- 10. cakephp從兩個表中獲取數據
- 11. CakePHP從多個表中獲取數據
- 12. CakePHP - 從表中獲取數據
- 13. 獲取數據庫表中的記錄總數
- 14. 從表中獲取記錄
- 15. 如何從表單編號直接更新數據庫中的記錄(Access 2007)
- 16. 從數據庫獲取所有記錄到Vaadin表
- 17. 從jquery和ajax數據庫獲取記錄列表
- 18. CakePHP從數據庫中取回數據
- 19. 在Rails 4中根據date_of_birth從數據庫獲取記錄
- 20. Cakephp - 從無關聯的模型中獲取數據庫數據
- 21. 從數據庫中獲取記錄時的動態rowspan
- 22. 從線程獲取數據庫中的最新記錄
- 23. 如何從我的數據庫中獲取多個記錄?
- 24. 從數據庫表中獲取數據
- 25. PHP從數據庫獲取數據請按照編號
- 26. 從codeigniter編輯數據庫記錄
- 27. CakePHP從另一個表中獲取記錄(如果ID匹配)
- 28. 獲取記錄在MySQL數據庫
- 29. 從數據庫表中獲取隨機記錄與mysql中的多個檢查?
- 30. PHP - 更新/編輯數據庫表中的數據/記錄
爲什麼在插入之前需要知道ID?這不應該有任何需要。如果您在插入前需要ID,那麼您的編碼習慣可能不正確。 – BadHorsie