我将符号2与条令2结合使用。
我开发了一个功能,用户可以从外部源将数据导入数据库。我现在必须实现一个"恢复"功能。基本上,用户应该能够一键撤消整个导入操作。
行为将与数据子集的mysql回滚或mysqldump+重新导入相同,但我需要在应用程序级别使用Doctrine 2。
序列化和取消序列化代理或使用工作单元都没有成功。我现在正在实现一个实用程序类,用于将实体(以及指定的关系)保存到数组/从数组中恢复,但要管理所有关系需要做大量工作。
有没有更简单的解决方案?
我不认为以下是一个优雅的解决方案,因为它非常具有侵入性,但它可能会有所帮助,而且很可能非常高效:
对于每个实体,指定一个导入字段,该字段指的是输入实体。恢复时,只需删除映射到给定导入的所有实体。如果修改实体以添加导入字段过于侵入性或不是一个选项,则可以考虑将导入映射到特定实体的OneToOne关系。这也在一定程度上减少了耦合。
如果导入也包含更新,事情显然会变得更加复杂;导入后发生在数据上的修改也是如此。恢复将失败或级联到新实体。