克隆实体和CakePHP 3中的所有相关实体
在我的CakePHP 3应用程序中,我有一个需要克隆和保存的复杂实体树 该结构的根源是一份问卷,一份问卷有很多问题,每个问题都有很多领域,等等(它更深入)。现在,我希望用户能够通过复制旧问卷来定义新问卷。然后他们可以改变任何他们需要的克隆实体和CakePHP 3中的所有相关实体,php,cakephp,cakephp-3.0,Php,Cakephp,Cakephp 3.0,在我的CakePHP 3应用程序中,我有一个需要克隆和保存的复杂实体树 该结构的根源是一份问卷,一份问卷有很多问题,每个问题都有很多领域,等等(它更深入)。现在,我希望用户能够通过复制旧问卷来定义新问卷。然后他们可以改变任何他们需要的 我可以使用$inventory->$this->inventures->get($id)和适当的包含字段来获取需要复制的内容的转储。是否有一种聪明的方法将其保存为一组新实体,同时保留它们之间的数据和结构?我认为最好的方法是遵循工作流程: 获取要克隆的对象 检查集合
我可以使用
$inventory->$this->inventures->get($id)
和适当的包含字段来获取需要复制的内容的转储。是否有一种聪明的方法将其保存为一组新实体,同时保留它们之间的数据和结构?我认为最好的方法是遵循工作流程:
$this->investments->newEntity($arrayData,['associations'=>['Questions','…]]中使用它代码>
好了,在Cake 3:-)中没有“更聪明”的方法克隆具有关联的实体。您也可以使用。您只需配置行为,它会为您提供其他功能,如设置默认值或向某些字段添加文本。以下是我在需要类似内容时的操作方法(适用于问卷示例): 参考资料:
$newEtity = $someTable->newEntity($oldEtity->toArray());
unset($newDevice->created);
unset($newDevice->id);
$someTable->save($newEntity);
工作原理如下:)这里转换为数组并返回实体有什么意义?假设要克隆的对象已经是一个实体,此双重转换的结果会有任何有用的不同吗?因为您需要它作为
newEntity()
()中的数组数据,所以值得尝试克隆实体,删除ID,然后尝试在save()中使用它
-我不确定这是否会将其保存为一个新实体,但它实际上可以做到这一点。。()是的,我认为如果您删除所有ID并调用isNew(true)
,您将得到与转换为数组并返回相同的结果。在构建一个递归和通用(基于模型的关联)的函数的过程中,它还没有被完全测试。啊哈!我甚至不确定除了删除ID之外还有什么必要。。。
$newEtity = $someTable->newEntity($oldEtity->toArray());
unset($newDevice->created);
unset($newDevice->id);
$someTable->save($newEntity);
$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);