【发布时间】:2014-07-11 02:10:15
【问题描述】:
我有一个使用党分析模式来简化关联的数据库(因为它必须存储有关人员和组织的信息,两者都有共同的属性)。因此,我的相关模型可以变得相当深入。我的问题是保存数据的最佳方法是什么?以保存员工为例,Employee 表不直接连接到 Party 表,但是如果我将模型嵌套在这样的数组中:
array(
'Party' => array(
'Email' => array(...),
'Address' => array(
'Country' => array(...),
'Location' => array(
'State' => array(...)
)
),
'PhoneNumber' => array(...),
'Person' => array(
'Language' => array(...),
'Skill' => array(...),
'Employee' => array(
'WorkHistory' => array(...),
'Qualification' => array(...)
)
)
)
)
我可以使用 saveAll,它会保存所有内容。这意味着在我的表单上,我有诸如 Party.Person.Employee.start_time 之类的字段名称。然而,有人告诉我这样做并没有真正遵循 CakePHP 的约定。另一种选择是让我的数组像这样:
array(
'Party' => array(...)
'Email' => array(...),
'Address' => array(...),
'Country' => array(...),
'Location' => array(...),
'PhoneNumber' => array(...),
'Person' => array(...),
'Language' => array(...),
'Skill' => array(...),
'Employee' => array(...),
'WorkHistory' => array(...),
'Qualification' => array(...)
)
但是,如果我对此调用 saveAll,则不会保存所有内容,因为某些表/模型没有直接连接到 Party。据我所知,保存这种结构的唯一方法是使用事务。
所以我想知道 CakePHP 专家认为解决需要保存非常深的关联模型的情况的最佳方法是什么?
编辑:
根据我收到的响应可以收集到的信息,对于您调用 saveAll 的模型,与它直接关联的其他模型不需要嵌套在该模型数组中。但是,如果您还想保存与它没有直接关联的模型,那么您需要将这些模型嵌套在与您调用 saveAll 的模型直接关联的模型中。抱歉,我知道这很令人困惑,所以这里是我根据这些信息修改后的数组结构:
array(
'Party' => array(...),
'Email' => array(...),
'Address' => array(
'Country' => 'attribute',
'Location' => 'attribute',
'State' => 'attribute'
),
'PhoneNumber' => array(...),
'Person' => array(
'Language' => array(...),
'Skill' => array(...),
'Employee' => array(
'WorkHistory' => array(...),
'Qualification' => array(...)
)
)
)
Person 直接与 Party 关联,因此不需要嵌套在 Party 中。但是 Employee(Person 的一种)与 Party 没有直接关联,因此在 Party 上调用 saveAll 时要保存 Employee 数据,需要嵌套在 Person 中,因为 Person 模型直接与 Party 关联。 (仅供参考:Party hasOne Person 和 Person hasOne Employee。这是我能想到的在我的数据库中构建继承的最佳方式)。通过以这种方式构建它,应用程序既符合 CakePHP 标准,又能以最小的努力保存数据。
【问题讨论】:
-
这个人有没有给你解释为什么不使用第一种方式?如果它有效,我会使用它。
-
这是我询问的关于“可包含”的问题的链接,我试图在我的视图中以表单的方式格式化数组:stackoverflow.com/questions/24604104/… 发表的评论是“为什么如果你想一开始就违反 CakePHP 约定,那只会造成麻烦……”。但没有解释。然而,响应者并没有真正了解我为什么要这样构建我的数组。所以我想我应该检查一下是否可以,或者是否有理由不这样做。
标签: cakephp cakephp-2.3