刪除數據
CakePHP 的模型類提供了幾種從數據庫中刪除記錄的方法。
delete
delete(int $id = null, boolean $cascade = true);
通過 $id 刪除記錄。默認情況下,同時刪除那些依賴於被刪除記錄的記錄。
例如,刪除一個與許多 Recipe 記錄相關的 User 記錄(User ‘hasMany’ 或者 ‘hasAndBelongsToMany’ Recipes):
- 如果 $cascade 設置爲 true,相關的 Recipe 記錄也被刪除(模型的 dependent-value 設置爲 true)。
- 如果 $cascade 設置爲 false,User 刪除後,Recipe 記錄仍被保留。
如果數據庫支持外鍵和級聯刪除,會比 CakePHP 的級聯更優先被依賴。使用 Model:delete() 的級聯特性的好處之一是它允許你使用行爲和模型的回調:
1 $this->Comment->delete($this->request->data('Comment.id'));
你可以使用同時存在於模型和行爲中的 beforeDelete 和 afterDelete 向刪除過程掛接自定義邏輯。更多信息請參見回調方法。
deleteAll
deleteAll(mixed $conditions, $cascade = true, $callbacks = false)
除了 deleteAll() 將刪除所有與提供的條件相匹配的記錄之外,它與 delete() 基本一樣。$conditions 數組將以 SQL 片段或數組的形式提供。
- conditions 要匹配的條件
- cascade 邏輯值,設置爲 true,刪除時將同時刪除有依賴關係的記錄。
- callbacks 邏輯值,運行回調
成功時返回 True,失敗時挽回 False。
示例:
1 // 刪除所用的條件與 find() 相同 2 $this->Comment->deleteAll(array('Comment.spam' => true), false);
如果刪除帶有回調 和/或 級聯,將查找相關行並刪除。這常常會導致發出多條查詢。
註解
當刪除條件成功執行但沒有記錄匹配時,即使沒有記錄被刪除,deleteAll() 也將返回 true。