好用的PHP ORM库?

267

有没有适用于PHP的好的对象关系映射库?

我知道 PDO/ADO,但它们似乎只提供了对不同数据库厂商之间差异的抽象,并没有提供领域模型和关系模型之间实际的映射。我正在寻找一种类似于Java中的Hibernate 或 .NET 中的 NHibernate 的 PHP 库。

36个回答

7

6
PHP 5的对象关系映射器dORM 一个机会。它支持各种关系(1对1),(1对多),(多对多)和数据类型。 它完全不会干扰:不需要代码生成或类扩展。 在我看来,它比任何ORM都要优秀,包括Doctrine和Propel。 然而,它仍处于beta阶段,在接下来的几个月中可能会有重大改变。http://www.getdorm.com 它还具有非常小的学习曲线。 您将使用的三种主要方法是:
<?php 
$object = $dorm->getClassName('id_here');
$dorm->save($object);
$dorm->delete($object);

4

我对Idiorm和Paris有着很好的使用经验。Idiorm是一个小巧、简单的ORM库。Paris是基于Idiorm构建的同样简单的Active Record实现。它适用于PHP 5.2+与PDO。如果你想要一个简单的东西,可以轻松地放入现有的应用程序中,那么它就非常完美。


4
我目前正在开发 phpDataMapper,这是一个ORM,旨在像Ruby的Datamapper项目一样具有简单的语法。尽管仍处于早期开发阶段,但它运行良好。

4
尝试了Flourish库的ORM。

是的,我已经使用它一段时间了。Flourishlib非常棒,但ORM仍需要改进。在处理具有附加属性或外键的连接表时,创建新对象可能会有些繁琐。处理简单模型非常容易。可以尝试使用Repose ORM或Outlet作为PHP的替代ORM。 - Michael

3
尝试使用PHP ADOdb。
我不能说它是最好的,因为我没有用过其他的。但它很快,支持Memcached和缓存。
而且它比Zend Framework的DB/Select快得多。

2
adodb更适合于Thin Model/Fat Controller风格,这通常不是一件好事。 - jblue
ADOdb具有ORM(但不仅仅是ORM)。它通常是一个非常好的解决方案,比Zend在数据库方面表现要好得多(除了比ADOdb慢之外,Zend DB仅具有有限的JOIN支持),它支持参数化的自动转义(不像Doctrine),许多不同的DB后端,并且具有可扩展的缓存设计和超级简单的memcache集成。我认为说它适用于“瘦模型/胖控制器”实现并不准确(你可以这样做或不这样做,但ADOdb的设计并不偏向任何一种方式)。 - Iain Collins

3

在 PHP 5.3 版本之前,不要期望有一个好的 ORM。这是 PHP 面向对象方面的限制。


那么 PHP 5.3 如何帮助某人编写更好的 ORM 呢?我看不出任何理由。 - Ionuț G. Stan
8
主要原因是引入了后期静态绑定("static"关键字)。在http://blog.felho.hu/what-is-new-in-php-53-part-2-late-static-binding.html 阅读相关信息。 - knoopx
2
ORM并不真正需要静态变量,它们可以仅使用实例变量进行良好的设计。 - Tom Pažourek
真正的,延迟静态绑定是我能够获取每个ORM实例的原因,我的自己的ORM非常低。在延迟静态绑定之前,它和其他大多数ORM一样浪费资源。 - Xeoncross

3

我的朋友Kien和我改进了他之前在PHP 5.3之前编写的ORM的早期版本。 我们本质上将Ruby on Rails的Active Record移植到了PHP中。 它仍然缺少一些我们想要的关键功能,例如事务,复合主键支持,还有一些适配器(目前仅支持MySQL和SQLite 3)。 但是,我们非常接近完成这些内容。 您可以查看PHP 5.3中的PHP ActiveRecord


请告诉我如果我错了,但是...我们真的需要在ORM软件中管理事务吗?这不是RDBMS的工作吗?对于我来说,CRUD和基本表维护已经足够了。毕竟,你不应该在第二天就更换你的DBMS,所以为复杂数据处理编写一些存储过程就可以解决问题,而不是用PHP抓狂,除非你正在创建一个PHP软件,它旨在同时连接到不同的数据库供应商并在它们上运行相同的例程。 - jgarcias
顺便说一下,那个链接现在已经失效了。 - jgarcias

3
请查看LEAP ORM for Kohana,它可以与多种数据库一起使用,包括DB2DrizzleFirebirdMariaDB、SQL Server、MySQL、Oracle、PostgreSQLSQLite。只需一个简单的autoload函数,就可以与几乎所有PHP框架一起使用。源代码在GitHub上,网址是https://github.com/spadefoot/kohana-orm-leap。您可以在线查看LEAP的教程
ORM库支持非整数主键和组合键。连接通过数据库连接池进行管理,并且可以使用原始SQL查询。ORM甚至具有查询构建器,可使构建SQL语句变得非常简单。

3

巴西ORM:http://www.hufersil.com.br/lumine。它适用于PHP 5.2+。在我看来,它是葡萄牙语和巴西人的最佳选择,因为它有易于理解的文档和大量的示例可供下载。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接