我使用 Symfony2 PHP框架与 Doctrine ORM 和 mysql 来存储数据。
我的目标是通过从遗留数据库系统加载数据来填充Doctrine实体(PHP对象),遗留数据库系统以key:value对的形式返回数据。
我有很多PHP objects('Company','Employee',etc.)
扩展了相同的Abstract Class('AbstractDatabaseRecord').
我的abstract class('AbstractDatabaseRecord')
有一个属性(' DatabaseTable
'),告诉我在为每个对象加载数据时使用哪个表格('公司', '员工'等)
我的抽象类实现了一个interface ('DatabaseLoadable')
,它需要一个名为getColumns()
的方法,它应该返回构成对象属性的列数组。该接口还需要一个名为loadDatabaseData()
的方法,该方法应处理从遗留系统返回的数组,并运行适当的setter来填充PHP对象。
我有一个名为LegacyDatabase
的Symfony2服务(PHP类),它有几个名为findOne()
和findAll().
的方法
findOne(AbstractDatabaseRecord $object, $id)
接受一个对象,使用DatabaseTable属性确定要查询的表,然后使用id查询该表。然后它使用loadDatabaseData()
方法填充对象并将对象返回给我,以便我可以使用它。
我认为这个结构正常,但我不确定如何实现findAll()
函数。
findAll(AbstractDatabaseRecord)
接受一个对象,使用DatabaseTable
属性来确定要查询的表,然后从该表中选择所有记录。然后我遍历结果,理想情况下将为找到的每个记录填充一个新对象,将对象放在一个数组中,并返回新创建的对象数组供我使用。
但是在函数中我只有一个对象的实例。如果我现在知道传入的Concrete Parent类,那么创建其他实例的最佳方法是什么?
根据我的研究,似乎我想要克隆对象以获得浅拷贝,然后填充该新副本并将其添加到我的对象数组中。这是最好的方法吗?