我正在将Zend Framework 3应用程序的DBAL迁移到Doctrine。数据检索部分已完成并正常工作。现在轮到了数据保存。
对象/实体的动态结构或多或少是复杂的(约10
级)。然后有Fieldset
s的结构,它反映了对象的结构。将Form
的数据保存到嵌套对象/实体是Zend\Form
的问题。所以我从Form
得到了一个准备保存的完整对象。
目前保存工作如下:
有一个Mapper
类的结构,它反映了对象'/实体'的结构。意思是:每个实体都有Mapper
。每个Mapper
都知道其“子Mappers
”。如果映射器FooEntity
处理的实体FooMapper
具有BarEntity
类型的属性,则FooMapper#save(...)
会调用BarMapper#save(...)
来保留它。然后,如果映射器BarEntity
处理的实体BarMapper
具有BuzEntity[]
类型的属性,BarMapper#save(...)
将在循环中调用BuzMapper#save(...)
以保留数据。等等......
如何使用Doctrine的功能替换所有难以维护的东西,并以更优雅的方式处理这种级联保存?
使用cascade={"persist"}
可以消除某些保存功能。但我的问题是,对于所有其余部分,我没有比保持分层Mapper
结构只是替换Zend\Db
的{{1}}和insert(...)
更好的想法。学说的update(...)
。