在Active Record风格的ORM中实现预先加载的干净方式?

时间:2011-03-25 02:46:18

标签: php orm activerecord

我正在用PHP编写一个非常轻量级的ActiveRecord实现。我有基础工作,但我想实现至少一对一关系的急切加载。我一直在以干净的方式集思广益。

如果我渴望加载单个一对一关系,我将不得不知道两个表的列,并且必须按照某些约定对列进行别名,这样我才能将结果映射回正确的对象。

我正在寻找有关如何对每个表中的列进行别名的建议,以便将它们映射回各自的对象尽可能轻松。

我最初的想法是将基表的列别名为“base_column_name”,将相关的表列别名为“user_email”(如果“User”是相关对象的名称)。有没有更好的方法来做到这一点,我忽略了?

我考虑的第二个选项是从基表中获取所有对象,然后使用基表中的键将相关对象收集到一个“WHERE IN”中。但是,这会导致性能问题吗?

1 个答案:

答案 0 :(得分:0)

CakePHP在其ActiveRecord实现中使用php的灵活关联数组。所以一对多的关系可能是

array('Tablename'=>array('columnname'=>'columnvalue'), 
      'AssociatedTable'=>array('0', 
             array('columnname'=>'columnvalue')));

它确实在所有内容中添加了一层,因此您必须执行$ data ['tablename'] ['columnname'];