良好的PHP ORM库?

有没有一个好的PHP的对象关系映射库?

我知道PDO / ADO,但他们似乎只提供数据库供应商之间的差异的抽象,而不是域模型和关系模型之间的实际映射。 我正在寻找一个PHP库,其function与Hibernate对Java和NHibernate为.NET所做的一样。

研究教义 。

Doctrine 1.2实现了Active Record。 Doctrine 2+是一个DataMapper ORM。

另外,检查Xyster 。 它基于数据映射器模式。

另外,看看DataMapper与Active Record 。

尝试RedBean ,其要求:

  • 没有configuration
  • 没有数据库(它在飞行中创build一切)
  • 没有模型
  • 等等

它甚至为你做了所有的locking和交易,并在后台监视性能。 (嘿!它甚至做垃圾收集….)最重要的是…你不必写一行代码…耶稣这个 , ORM层 ,救了我屁股!

只有两个好的: 主义和推进 。 我们赞成主义,它与Symfony很好地合作。 但是,如果您正在寻找除主要数据库之外的数据库支持,则必须编写自己的代码。

Axon ORM是无脂框架的一部分 – 它具有一个即时映射器。 没有代码生成器。 没有愚蠢的XML / YAMLconfiguration文件。 它直接从后端读取数据库模式,所以在大多数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工具。 我将它与第一条分开提及,因为它是一个完全不同的软件。 它从头改写,目前仍处于testing阶段,但现在已经可以使用并开发了。

这是一个非常复杂的ORM,但devise良好。 原来的教义1的许多魔法消失了。 它提供了一个完整的解决scheme,你可以在Doctrine2之上编写自己的ORM,或者只使用其中的一个图层 。

检查出口ORM 。 它比Propel和Doctrine更简单,它的工作方式与Hibernate类似,只是更多的PHP感觉。

我刚刚开始使用Kohana ,它似乎最接近于Ruby on Rails,没有像Propel那样调用多个configuration文件的复杂性。

我非常喜欢Propel , 在这里你可以得到一个概述, 文档是相当不错的,你可以通过PEAR或SVN。

你只需要一个有效的PHP5安装, Phing就可以开始生成类。

我在PHP库Flourish中findORM相关的类。

给dom,一个用于PHP 5的对象关系映射器 。 它支持各种关系(1对1),(1对多),(多对多)和数据types。 这是完全不引人注意的:不需要代码生成或类延伸。 在我看来,它是优于任何ORM在那里,包括教条和Propel。 不过,它仍处于testing阶段,未来几个月可能会发生重大变化。 http://www.getdorm.com

它也有一个非常小的学习曲线。 您将使用的三种主要方法是:

 <?php $object = $dorm->getClassName('id_here'); $dorm->save($object); $dorm->delete($object); 

你应该看看Idiorm和巴黎 。

我目前正在研究phpDataMapper ,这是一个ORM,它被devise成像Ruby的Datamapper项目一样简单的语法。 它还处于早期发展阶段,但效果很好。

尝试了蓬勃发展的图书馆的ORM 。

直到PHP 5.3版本不期望有一个好的ORM。 这是PHP的OO限制。

我和Idiorm和巴黎有过很棒的经历。 Idiorm是一个小而简单的ORM库。 Paris是一个基于Idiorm的同样简单的Active Record实现。 这是用PHP 5.2+与PDO。 如果你想要一些简单的东西,你可以放入现有的应用程序,这是完美的。

我的朋友Kien和我在PHP 5.3之前编写的一个ORM的早期版本得到了改进。 我们基本上把Ruby on Rails的Active Record移植到了PHP中。 它仍然缺乏一些我们想要的关键特性,例如事务,复合主键支持,更多的适配器(现在只有MySQL和SQLite 3)。 但是,我们非常接近完成这个东西了。 你可以看看PHP的ActiveRecord PHP 5.3

试试PHP ADOdb。

我不能说这是最好的,因为我没有使用其他的。 但速度很快,它支持Memcached和caching。

而且它比Zend Framework的 DB / Select更快。

看看Kohana的LEAP ORM 。 它可以与DB2 , Drizzle , Firebird , MariaDB ,SQL Server, MySQL ,Oracle, PostgreSQL和SQLite等大量数据库协同工作。 通过一个简单的自动加载function,它几乎可以在任何PHP框架中使用。 源代码位于https://github.com/spadefoot/kohana-orm-leap上的GitHub上。; 您可以在线检查LEAP的教程 。

ORM库使用非整数主键和组合键。 连接通过数据库连接池进行pipe理,并可与原始SQL查询配合使用。 ORM甚至有一个查询生成器,可以使构buildSQL语句变得非常简单。

如果你感觉冒险,你可以看看rest 。 就像Outlet ,它是在Hibernate之后build模的。

它的发展还很早,但是到目前为止,领域模型的唯一限制是类没有标记为最终的,属性也没有标记为私有。 一旦我进入PHP> 5.3的土地,我也会尝试实现对私有财产的支持。

如果你正在寻找一个实现了Data Mapper范例而不是Active Record的ORM,那么我强烈build议你看看GacelaPHP 。

Gacela的特点:

  • 数据映射器
  • 外键映射
  • 关联映射
  • 依赖映射
  • 具体的表inheritance
  • 查询对象
  • 元数据映射
  • 懒惰和渴望加载
  • 完整的Memcached支持

其他的ORM解决scheme太繁琐,或者在开发任何复杂的东西的时候都会有很大的局限性。 Gacela通过实现Data Mapper模式来解决活动logging方法的局限性,同时通过对数据库和Memcached的所有交互使用PDO来保持最小膨胀。

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

它适用于MySQL , PostgreSQL和SQLite 。

巴西ORM: http : //www.hufersil.com.br/lumine 。 它适用于PHP 5.2 +。 在我看来,这是葡萄牙和巴西人最好的select,因为它有简单易懂的文档和大量的下载实例。

敏捷工具包有自己独特的ORM / ActiveRecord和dynamicSQL的实现 。

简介: http : //agiletoolkit.org/intro/1

语法(Active Record):

 $emp=$this->add('Model_Employee'); $emp['name']='John'; $emp['salary']=500; $emp->save(); 

语法(dynamicSQL):

 $result = $emp->count()->where('salary','>',400)->getOne(); 

虽然Dynamic SQL和Active Record / ORM可以直接使用,但Agile Toolkit进一步将它们与用户界面和jQuery UI集成在一起。 这与JSF类似,但是用纯PHP编写。

 $this->add('CRUD')->setModel('Employee'); 

这将为Employee模型显示AJAXified CRUD 。

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"; } 

我在miniOrm上工作。 只是一个迷你的ORM,尽可能简单地使用对象模型和MySQL抽象层。 希望它可以帮助你: http : //jelnivo.fr/miniOrm/

PHP ORM Faces用于PDO扩展。 查看PHP Faces框架

 $urun = new Product(); $urun->name='CPU' $urun->prince='124'; $urun->save(); 

看看http://code.google.com/p/lworm/ 。 这是一个非常简单,但function强大,轻量级的PHP ORM系统。 如果你愿意的话,你也可以很容易地扩展它。

我们使用的另一个伟大的开源PHP ORM是PHPSmartDb 。 它是稳定的,使您的代码更安全,更干净。 其中的数据库function是我用过的最简单的PHP 5.3。

学说可能是你最好的select。 在Doctrine之前, DB_DataObject实质上是开源的唯一其他实用工具。