2013-05-13 85 views
0

我的數據結構如下:CakePHP的數據庫設計

Company hasMany Regions 
Region hasMany Markets 
Market hasMany Stores 
Store hasMany Employees 

我也有相應的屬於關聯必要。

我使用外鍵進行關聯。例如,每個商店都有market_id。

當我刪除公司記錄時,正確的區域也被刪除。但是,我想到我還需要刪除所有關聯的市場,商店和員工。或者,如果我刪除了某個市場,則需要刪除所有商店和員工。

完成此操作的最恰當方式是什麼?

  1. 我會添加額外的外鍵到表嗎?例如,除了market_id,商店是否還需要region_id和company_id?

回答

1

使用依賴於關聯:

http://book.cakephp.org/2.0/en/models/associations-linking-models-together.html#hasmany

dependent: When dependent is set to true, recursive model deletion is possible. In this example, Comment records will be deleted when their associated User record has been deleted.

你並不需要添加額外的外鍵。

+0

嗨,謝謝你的回覆。這適用於一個級別。我添加了依賴於公司hasMany Regions模型。這產生了預期的結果,相關區域被刪除。但是,市場,商店和員工並未被刪除。 (我確實爲所有模型添加了依賴關係)。接下來,我嘗試將公司擁有多個市場添加到公司模式。這導致了以下錯誤:「致命錯誤:類聲明可能不嵌套...」我需要遞歸刪除來遍佈許多表,從公司到區域到市場到存儲到員工的基礎上刪除公司。 – Jose 2013-05-13 13:39:23

+0

好吧,我明白了!在CompaniesController.php中的刪除調用需要級聯設置爲true。這看起來像$ this-> Company-> delete($ id,true)。此外,對於從其他級別開始,如果我在Market上開始刪除,我會將級聯添加爲true,同時刪除關聯的商店和員工。 – Jose 2013-05-13 13:53:51