PHP有一个很好的对象关系映射库吗?
我知道PDO/ADO,但它们似乎只提供数据库供应商之间差异的抽象,而不是域模型和关系模型之间的实际映射.我正在寻找一个PHP库,其功能类似于Hibernate为Java和NHibernate为.NET做的方式.
看看学说.
Doctrine 1.2实现了Active Record.Doctrine 2+是一个DataMapper ORM.
另外,看看Xyster.它基于Data Mapper模式.
另外,请查看DataMapper与Active Record.
试试RedBean,它要求:
没有配置
没有数据库(它可以动态创建所有内容)
没有型号
等等
它甚至可以为您执行所有锁定和事务处理,并在后台监视性能.(哎呀!它甚至可以进行垃圾收集....)最重要的是......你不必写一行代码......耶稣这个,ORM层,救了我屁股!
只有两个好的:Doctrine和Propel.我们赞成Doctrine,它与Symfony配合得很好.但是,如果您正在寻找除主要数据库支持之外的数据库支持,则必须编写自己的代码.
Axon ORM是Fat-Free Framework的一部分 - 它具有即时映射器.没有代码生成器.没有愚蠢的XML/YAML配置文件.它直接从后端读取数据库模式,因此在大多数CRUD操作中,您甚至不必扩展基本模型.它适用于所有主要的PDO支持的数据库引擎:MySQL,SQLite,SQL Server/Sybase,Oracle,PostgreSQL等.
/* SQL */ CREATE TABLE products ( product_id INTEGER, description VARCHAR(128), PRIMARY KEY (product_id) ); /* PHP */ // Create $product=new Axon('products'); // Automatically reads the above schema $product->product_id=123; $product->description='Sofa bed'; $product->save(); // ORM knows it's a new record // Retrieve $product->load('product_id=123'); echo $product->description; // Update $product->description='A better sofa bed'; $product->save(); // ORM knows it's an existing record // Delete $product->erase();
最重要的是,插件和附带的SQL数据访问层与框架一样轻量级:14 KB(Axon)+ 6 KB(SQLdb).无脂肪只需55 KB.
我一直在自己开发Pork.dbObject.(一个简单的PHP ORM和Active Record实现)主要原因是我发现大多数ORM太重了.
Pork.dbObejct的主要思想是重量轻,设置简单.没有一堆XML文件,只是构造函数中的一个函数调用来绑定它,addRelation或addCustomRelation来定义与另一个dbObject的关系.
看看:Pork.dbObject
试试Doctrine2.它可能是PHP最强大的ORM工具.我将它与Doctrine 1分开提及,因为它是一个完全不同的软件.它已经从头开始重写,仍然处于测试阶段,但现在可以使用并开发了.
这是一个非常复杂的ORM,但设计精良.原始主义1的许多魔法消失了.它提供了一个完整的解决方案,您可以在Doctrine2之上编写自己的ORM,或只使用其中一个层.
我刚开始使用Kohana,它似乎最接近Ruby on Rails而没有调用像Propel那样的多个配置文件的所有复杂性.
查看Outlet ORM.它比Propel和Doctrine更简单,它的工作方式类似于Hibernate,只有更多的PHP感觉.
我非常喜欢Propel,在这里你可以得到一个概述,文档非常好,你可以通过PEAR或SVN获得它.
您只需要一个有效的PHP5安装,并且Phing可以开始生成类.
我在PHP库蓬勃发展中找到了与ORM相关的类.
尝试使用dORM,PHP 5的对象关系映射器.它支持各种关系(1对1),(1对多),(多对多)和数据类型.它完全不引人注目:不需要代码生成或类扩展.在我看来,它优于任何ORM,包括Doctrine和Propel.但是,它仍处于测试阶段,并可能在未来几个月内发生重大变化.http://www.getdorm.com
它的学习曲线也非常小.您将使用的三种主要方法是:
getClassName('id_here'); $dorm->save($object); $dorm->delete($object);
你应该看看Idiorm和巴黎.