CakePHP 3中的克隆实体和所有相关实体

时间:2015-11-10 15:23:49

标签: php cakephp cakephp-3.0

在我的CakePHP 3应用程序中,我需要克隆并保存一些精心设计的实体树。

结构的根源是问卷调查,调查问卷有很多问题,每个问题都有很多字段等等(它更深入)。现在,我希望用户能够通过复制旧问卷来定义新问卷。然后他们可以改变他们需要的东西。

我可以使用$questionnaire->$this->Questionnaires->get($id)和相应的包含字段来转储我需要复制的内容。有没有一种聪明的方法可以将它保存为一堆新实体,同时保留它们之间的数据和结构?

5 个答案:

答案 0 :(得分:5)

您也可以使用this plugin。您只需配置行为,它就会为您提供其他功能,例如设置默认值或将文本附加到某个字段。

答案 1 :(得分:4)

我认为最好的方法是遵循工作流程:

  1. 获取要克隆的对象
  2. 浏览收藏并删除所有ID
  3. 转换为数组并在$this->Questionnaires->newEntity($arrayData, ['associations' => ['Questions', '...']]);
  4. 中使用该数组
  5. 现在使用您要保留的所有相关数据保存新实体
  6. AFAIK没有“更聪明”的方法来克隆Cake 3中具有关联的实体: - )

答案 2 :(得分:1)

使用EntityInteface toArray()获取其所有字段:

$newEtity = $someTable->newEntity($oldEtity->toArray());
unset($newDevice->created);
unset($newDevice->id);
$someTable->save($newEntity);

答案 3 :(得分:1)

$original = $this->Table->get($id)->toArray();
$copy = $this->Table->newEntity();
$copy = $this->Table->patchEntity($copy, $original);

unset($copy['id']);
// Unset or modify all others what you need

$this->Table->save($copy);

像这样完美地工作:)

答案 4 :(得分:0)

当我需要类似的东西(适应于问卷调查的例子)时,这就是我的做法:

/data/pylib

参考文献: