PHP有好的对象关系映射库吗?

我知道PDO/ADO,但它们似乎只提供了数据库供应商之间差异的抽象,而不是域模型和关系模型之间的实际映射。我正在寻找一个PHP库,功能类似于Hibernate为Java和NHibernate为。net所做的方式。


当前回答

如果您正在寻找一个实现数据映射器范式(而不是专门实现活动记录)的ORM,那么我强烈建议您考虑一下GacelaPHP。

Gacela特点:

数据映射器 外键映射 关联映射 依赖映射 具体表继承 查询对象 元数据映射 懒惰和急于装载 完全支持Memcached

其他ORM解决方案在开发任何远程复杂的东西时都过于臃肿或具有繁重的限制。通过实现数据映射器模式,Gacela解决了活动记录方法的局限性,同时通过在与数据库和Memcached的所有交互中使用PDO将膨胀保持在最低限度。

其他回答

我真的很喜欢Propel,在这里你可以得到一个概述,文档非常好,你可以通过PEAR或SVN获得它。

你只需要安装PHP5,然后Phing就可以开始生成类了。

如果你喜欢冒险,可以试试Repose。与Outlet一样,它也模仿Hibernate。

它仍然处于开发的早期阶段,但到目前为止,域模型的唯一限制是类没有标记为final,属性没有标记为private。一旦我进入了PHP >= 5.3的领域,我将尝试实现对私有属性的支持。

我目前正在开发phpDataMapper,这是一个ORM,它的语法很简单,就像Ruby的Datamapper项目一样。虽然它仍处于早期开发阶段,但效果非常好。

MicroMVC有一个13 KB的ORM,它只依赖于一个8 KB的数据库类。它还将所有结果作为ORM对象本身返回,并使用后期静态绑定来避免将有关当前对象的表和元数据的信息嵌入到每个对象中。这导致了最便宜的ORM开销。

它适用于MySQL, PostgreSQL和SQLite。

NotORM

include "NotORM.php";
 $pdo = new PDO("mysql:dbname=software");
 $db = new NotORM($pdo);
 $applications = $db->application()
->select("id, title")
->where("web LIKE ?", "http://%")
->order("title")
->limit(10)
;
foreach ($applications as $id => $application) {
echo "$application[title]\n";
}