我在Cake php中保存数据时遇到了一些问题。
这是模特/关系。
我正在创建一个新区域,我允许用户创建多个新区域。在创建每个部门时,用户可以为该部门创建多个组。现在麻烦的是我不确定如何保存组数据。
对于动态创建的每个部门,我使用输入的多索引方法(即“Department.0.name”,Department.0.type),这将是一个使用saveAll方法保存的cinch 。但是,对于创建的每个组,我将需要一个department_id,并且由于区域的所有部门尚未保存,因此它们没有ID。如何保存新区的数据,保存新部门及其相关的新创建组?有没有办法可以解决组输入的名称属性,这将创建正确的关联,例如“Department.0.Group.0.name”?
提前致谢!!!如果有什么不清楚的地方,请不要犹豫,我会很乐意改写。
答案 0 :(得分:2)
您的POST数据阵列是什么样的?
<?php
debug($this->data);
?>
如果格式不正确,关联的模型将不会被保存.. Cake知道要抓取尚未保存的模型的“lastInsertId()”,所以你不必担心那些......我不确定的,而且文档并没有真正进入,这就是拯救的深度。提供的示例如下:
$this->data =
Array
(
[Article] => Array
(
[title] => My first article
)
[Comment] => Array
(
[0] => Array
(
[comment] => Comment 1
[user_id] => 1
)
[1] => Array
(
[comment] => Comment 2
[user_id] => 2
)
)
)
$this->Article->saveAll($this->data);
这是用于保存'hasMany'关系的相关模型的正确结构(cakephp 1.3),但我不确定它是否比一个孩子更深。
我想到的一件事是根据上面的格式构建数组,但保留父模型。然后手动保存父模型数据,抓住:: getLastInsertId();然后在部门和小组上进行保存。
[<强>更新强>] 我刚刚测试了你的理论,它会以你想要的方式运作。
<?php
echo $this->Form->input('Department.0.Group.0.name');
?>
将产生:
<input name="data[Department][0][Group][0][name]" type="text" id="Department0Group0name">
[更新2 ] 我在lib / Cake / Model / Model.php中做了一些探索,发现了这个:
<?php
...
public function saveAssociated($data = null, $options = array()) {
...
... // code omitted.
...
if ($options['deep']) { // This will recurse infinitely through all associations
$saved = $this->{$association}->saveAssociated($values, array_merge($options, array('atomic' => false)));
}
...
...
... // code omitted.
...
?>