cakephp 为相关模型的相关模型保存数据(不是拼写错误)

问题描述 投票:0回答:1

我在 cake php 中保存数据时遇到了一些问题。

这是模型/关系。

  • 有很多部门
  • 部门有很多团体

我处于创建新区的视图中,其中我允许用户创建多个新部门。在创建每个部门时,用户可以为该部门创建多个组。现在的问题是我不确定如何保存组数据。

对于动态创建的每个部门,我对输入使用多索引方法(即“Department.0.name”、Department.0.type),因此使用 saveAll 方法保存这将是轻而易举的事。但是,对于创建的每个组,我都需要一个 Department_id,并且由于尚未保存学区的任何部门,因此它们没有 ID。我如何保存这个新区的数据,保存新部门及其关联的新创建的组?有没有一种方法可以解决组输入的名称属性,从而创建正确的关联,例如“Department.0.Group.0.name”?

提前致谢!如果有任何不清楚的地方,请随时说出来,我很乐意重新表述。

php model cakephp-2.0 saving-data
1个回答
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();然后对部门和组进行 saveAll。


[更新] 我刚刚测试了你的理论,它会按照你想要的方式工作。

<?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.
...
?>
© www.soinside.com 2019 - 2024. All rights reserved.