用于映射许多MySQL表的PHP设计模式


PHP Design Patterns for mapping many MySQL tables

好的,所以我考虑实现活动记录设计模式,将类映射到MySQL数据库中的一些表上。

问题是,我想要一个通用类,它将根据选择的属性(数据库中的字段)在我的表中进行混洗,执行基本的CRUD事务。

因此,我有CRUD的方法,我想根据传递给对象的属性来选择这些方法,这些属性是我使用__get和__set方法访问的。

我考虑过使用一个数组,将它的键作为表前缀,并将它的值作为另一个数组(包含每个表的属性列表)。

但我认为这太复杂了,因为我必须遍历整个数组才能选择指定的表。

你能给我指一些我可以使用的设计技巧吗?谢谢

使用预先构建的库,如Doctrine、Propel或PHPActiveRecord,这些库可以从现有的DB架构生成类文件。还可以看看http://martinfowler.com/eaaCatalog/index.html关于对象关系映射等中使用的基本模式的一些想法

如果要解决的问题是"处理表",那么这就是实现的方法。

您希望执行哪些命令?插入记录,删除记录?

创建一个表示表的实体Table、表示列的值对象Column和表示表行的Record,并根据需要进行细化。

然后你就可以使用每一张桌子了。

用法应该像一样简单

<?php 
$usersTable = new Table($connection, 'users');
// sample search
$userRow = new Record('user');
$usersTable->find(array('id' => 1), $userRow);
// sample insert
$row = new Record('users', array('id' => 1, 'name' => 'jose'));
$result = $usersTable->insert($row);

但我只建议这才是真正的问题所在,否则您应该将业务实体表示为:用户、订单等。