有人可以从以下内容中得出一个具体的例子:
http://www.urdalen.com/blog/?p=210
..这表明如何处理one-to-many
和many-to-many
关系?
我不久前给作者发了电子邮件,但没有收到回复.我喜欢他的想法,但无法弄清楚如何在简单的单表关系之外实现它.
注意:我不想使用完整的ORM.我喜欢手工做我的SQL.我想改进我的应用程序代码的设计.现在,每个域对象都有自己的类,其中包含用静态方法包装的查询.它们只是返回标量,1d数组(记录)或2d数组(记录集),具体取决于查询.
ORM的问题(阻抗不匹配,正如它所称)恰恰与关系有关.在对象图(内存中对象)中,关系是指向其他对象的指针.在关系数据库中,关系是相反的; 这使得无法在两个模型之间进行简单的映射,这就是ORM如此复杂的原因.
如果你想要靠近数据库(避免使用ORM),那么你就不应该试图去除关系.我编写datamappers的方式如下:
$car42 = $car_gateway->fetch(42); $wheels = $wheel_gateway->selectByCar($car42);
与ORM方式相反:
$car42 = $car_gateway->fetch(42); $wheels = $car42->selectWheels();
这意味着网关最终会出现在客户端代码中,但它也会使事情保持透明并且接近数据库.