CakePHP 2.x CookBook 中文版 第七章 模型 之 刪除數據

 

刪除數據

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。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章