好的PHP ORM库?
是否有一个适用于PHP的良好的对象关系映射库?
我知道PDO / ADO,但是它们似乎仅提供数据库供应商之间差异的抽象,而不是域模型和关系模型之间的实际映射。我正在寻找一个PHP库,其功能类似于Hibernate对Java和NHibernate对.NET所做的方式。
解决方案
看学说。
原则1.2实现了Active Record。 Doctrine 2+是DataMapper ORM。
另外,请查看Xyster。它基于数据映射器模式。
另外,看看DataMapper与Active Record。
只有两个好人:教义和Propel。我们赞成Doctrine,它与Symfony一起使用时效果很好。但是,如果我们除了主要数据库之外还需要数据库支持,则必须编写自己的代码。
主义可能是我们最好的选择。在Doctrine之前,DB_DataObject本质上是唯一开源的其他实用程序。
我真的很喜欢Propel,在这里我们可以获取概述,文档非常好,并且可以通过PEAR或者SVN获得。
我们只需要有效的PHP5安装和Phing即可开始生成类。
我一直在自己开发Pork.dbObject。 (一个简单的PHP ORM和Active Record实现)
主要原因是我发现大多数ORM太繁重。
Pork.dbObejct的主要思想是重量轻且易于设置。没有一堆XML文件,只有构造函数中的一个函数将其绑定,还有addRelation或者addCustomRelation来定义与另一个dbObject的关系。
看看:Pork.dbObject
查看出口ORM。它比Propel和Doctrine更简单,并且与Hibernate相似,但带有更多的PHP感觉。
我只是从Kohana开始的,它似乎最接近Ruby on Rails,却没有像Propel那样调用多个配置文件的所有复杂性。
如果我们喜欢冒险,可以查看Repose。像Outlet一样,它是基于Hibernate建模的。
它的开发还处于初期,但是到目前为止,对域模型的唯一限制是这些类未标记为final且属性未标记为private。一旦进入PHP> = 5.3领域,我还将尝试实现对私有属性的支持。
我目前正在研究phpDataMapper,这是一个ORM,旨在具有简单的语法,例如Ruby的Datamapper项目。它也仍处于早期开发中,但是效果很好。
在PHP 5.3发行之前,不要指望拥有良好的ORM。这是PHP的OO限制。
试一下dORM,它是PHP 5的对象关系映射器。它支持各种关系(一对一),(一对多),(一对多)和数据类型。它是完全毫不干扰的:不需要代码生成或者类扩展。在我看来,它比任何ORM(包括Doctrine和Propel)都优越。但是,它仍处于测试阶段,并且可能在接下来的几个月中发生重大变化。 http://www.getdorm.com
它的学习曲线也很小。我们将使用的三种主要方法是:
<?php $object = $dorm->getClassName('id_here'); $dorm->save($object); $dorm->delete($object);
如果我们正在寻找像Hibernate这样的ORM,则应该考虑PMO。
可以轻松地将其集成到SOA体系结构中(只有一个Web服务类可以开发)。
试试RedBean,它需要:
- 没有配置
- 没有数据库(它可以动态创建所有内容)
- 没有型号
- 等等。
它甚至为我们完成所有锁定和事务处理,并在后台监视性能。 (哎呀!它甚至还可以进行垃圾回收...。)最重要的是……我们不必编写任何代码……代码……耶稣,ORM层,救了我!
我的朋友Kien和我改进了他在PHP 5.3之前编写的ORM的早期版本。实际上,我们已经将Ruby on Rails的Active Record移植到了PHP。它仍然缺少我们想要的一些关键功能,例如事务,复合主键支持,更多的适配器(目前只有MySQL和SQLite 3可以工作)。但是,我们非常接近完成这些工作。我们可以看看带有PHP 5.3的PHP ActiveRecord。
尝试使用PHP ADOdb。
我不能说这是最好的,因为我没有使用过其他的。但是它很快,它支持Memcached和缓存。
而且它比Zend Framework的DB / Select更快。
用于PDO扩展的PHP ORM Faces。参见PHP Faces框架。
$urun = new Product(); $urun->name='CPU' $urun->prince='124'; $urun->save();
QCubed框架中包含一个很棒的ORM。它基于代码生成和脚手架。与基于反射并且通常比较慢的ActiveRecord不同,代码生成会根据数据库为我们创建框架类,并让我们随后对其进行自定义。它像一种魅力。
尝试Doctrine2. 它可能是PHP中功能最强大的ORM工具。我将它与教义1分开提及,因为它是完全不同的软件。它是从头开始重写的,仍处于测试阶段,但是现在可以使用并开发了。
这是一个非常复杂的ORM,但设计合理。原始主义1的许多魔术消失了。它提供了完整的解决方案,我们可以在Doctrine2之上编写自己的ORM或者仅使用其一层。
Axon ORM是无脂肪框架的一部分,它具有动态映射器。没有代码生成器。没有愚蠢的XML / YAML配置文件。它直接从后端读取数据库模式,因此在大多数CRUD操作中,我们甚至不必扩展基本模型。它可与所有主要的PDO支持的数据库引擎一起使用:MySQL,SQLite,SQLServer / 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数据访问层与框架一样轻巧:14KB(Axon)+ 6KB(SQLdb)。无脂肪只有55KB。
我在PHP库Flourish中找到了与ORM相关的类。
尝试了蓬勃发展的图书馆的ORM。
查看http://code.google.com/p/lworm/。这是一个非常简单但功能强大的轻量级ORM系统,适用于PHP。如果需要,我们也可以轻松扩展它。