良好的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实质上是开源的唯一其他实用工具。