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

Xer*_*Xes 4 php cakephp cakephp-3.0

在我的CakePHP 3应用程序中,我需要克隆和保存一些复杂的实体树。

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

通过$questionnaire->$this->Questionnaires->get($id)与适当的包含字段一起使用,我可以获得需要复制的内容的转储。有什么聪明的方法可以将其保存为一堆新实体,同时保留它们之间的数据和结构?

Spr*_*riz 5

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

  1. 获取要克隆的对象
  2. 浏览集合并删除所有 ID
  3. 转换为数组并在 $this->Questionnaires->newEntity($arrayData, ['associations' => ['Questions', '...']]);
  4. 现在使用您要保留的所有相关数据保存新实体

AFAIK 在 Cake 3 中没有“更智能”的方法来克隆具有关联的实体 :-)

  • 是的,我认为如果您删除所有 ID 并调用 `isNew(true)`,您将获得与转换为数组并返回相同的结果。在构建一个将递归和通用地执行此操作的函数(基于模型的关联)的过程中,但尚未经过全面测试。 (2认同)

ppe*_*jon 5

您也可以使用此插件。您只需配置行为,它即可为您提供其他功能,例如设置默认值或将文本追加到某个字段。