2013-05-13 84 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