PHP有一个很好的对象关系映射库吗?
我知道PDO / ADO,但它们似乎只提供数据库供应商之间差异的抽象,而不是域模型和关系模型之间的实际映射 . 我正在寻找一个PHP库,其功能类似于Hibernate对Java和NHibernate对.NET的作用 .
学说可能是你最好的选择 . 在Doctrine之前,DB_DataObject本质上是唯一一个开源的其他实用程序 .
看看Doctrine .
Doctrine 1.2实现Active Record . Doctrine 2+是DataMapper ORM .
另外,请查看Xyster . 它基于Data Mapper模式 .
另外,看看DataMapper vs. Active Record .
试试RedBean,它要求:
没有配置
没有数据库(它可以动态创建所有内容)
没有型号
等
它甚至可以为您执行所有锁定和事务处理,并在后台监视性能 . (哎呀!它甚至可以进行垃圾收集......)最重要的是......你不必写一行代码......耶稣 this ,ORM layer,救了我的屁股!
只有两个好的:Doctrine和Propel . 我们赞成Doctrine,它适用于Symfony . 但是,如果你必须编写自己的代码 .
Axon ORM是Fat-Free Framework的一部分 - 它具有即时映射器 . 没有代码生成器 . 没有愚蠢的XML / YAML配置文件 . 它直接从后端读取数据库模式,因此在大多数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 . 它与Doctrine 1分开提及它,因为它从头开始重写,仍处于测试阶段,但它现在可用并开发了 .
这是一个非常复杂的ORM,但设计精良 . 原始主义1的许多魔法消失了 . 它提供了一个完整的解决方案,你可以write your own ORM on top of Doctrine2或只使用它的一个layers .
看看Outlet ORM . 它比Propel和Doctrine更简单,它的工作方式类似于Hibernate,只有更多的PHP感觉 .
我刚开始使用Kohana,它似乎最接近Ruby on Rails而没有调用多个配置文件的所有复杂性,例如Propel .
我真的很喜欢Propel,here你可以得到一个概述,documentation非常好,你可以通过PEAR或SVN获得它 .
您只需要安装PHP5,然后Phing开始生成类 .
我在PHP库Flourish中找到了与ORM相关的类 .
试试dORM, an object relational mapper for PHP 5 . 它支持各种关系(1对1),(1对多),(多对多)和数据类型 . 它完全不引人注目:不需要代码生成或类扩展 . 在我看来,它优于任何ORM,包括Doctrine和Propel . 但是,它仍处于测试阶段,并可能在未来几个月内发生重大变化 . http://www.getdorm.com
它的学习曲线也非常小 . 您将使用的三种主要方法是:
<?php $object = $dorm->getClassName('id_here'); $dorm->save($object); $dorm->delete($object);
你应该看看Idiorm and Paris .
我目前正致力于phpDataMapper,这是一个ORM,其设计也具有简单的语法,如Ruby 's Datamapper project. It'仍然处于早期开发阶段,但它的工作原理很棒 .
试过ORM of Flourish library .
在PHP 5.3发布之前,不要期望有一个好的ORM . 这是PHP的OO限制 .
我和Idiorm and Paris有过很好的经历 . Idiorm是一个小而简单的ORM库 . 巴黎是一个基于Idiorm的同样简单的Active Record实现 . 它是完美的,如果你想要一些简单的东西,你可以放入现有的应用程序 .
我的朋友Kien和我已经改进了他在PHP 5.3之前编写的早期版本的ORM . 我们基本上移植了Ruby on Rails'Active Record到PHP . 它仍然缺少我们想要的一些关键功能,例如事务,复合主键支持,更多适配器(现在只有MySQL和SQLite 3工作) . 但是,我们非常接近完成这些事情 . 你可以看一下PHP ActiveRecord with PHP 5.3 .
试试PHP ADOdb .
我可以't say it'是最好的,因为我没有't used the others. But it'快,它支持Memcached和缓存 .
并且它比Zend Framework's DB / Select快得多 .
看看LEAP ORM for Kohana . 它适用于大量数据库,包括DB2,_ Drizzle,Firebird,MariaDB,SQL Server,MySQL,Oracle,PostgreSQL和SQLite . 使用简单的自动加载功能,它几乎可以与任何PHP框架一起使用 . 源代码位于GitHub,位于https://github.com/spadefoot/kohana-orm-leap . 您可以在线结账LEAP's tutorials .
ORM库使用非整数主键和复合键 . 连接通过数据库连接池进行管理,并且可以与原始SQL查询一起使用 . ORM甚至还有一个查询构建器,它使构建SQL语句变得非常简单 .
如果您有冒险精神,可以查看Repose . 与Outlet类似,它是在Hibernate之后建模的 .
它的开发还处于早期阶段,但到目前为止,对域模型的唯一限制是类没有标记为final,属性没有标记为private . 一旦我进入PHP> = 5.3的土地,我将尝试实现对私有属性的支持 .
如果您正在寻找实现Data Mapper范例而不是Active Record的ORM,那么我强烈建议您查看GacelaPHP .
Gacela特色:
数据映射器
外键映射
关联映射
依赖映射
具体表继承
查询对象
元数据映射
懒惰和急切的加载
完整Memcached支持
在开发任何远程复杂的东西时,其他ORM解决方案过于膨胀或存在繁重的限制 . Gacela通过实现数据映射器模式解决了活动记录方法的局限性,同时通过使用PDO与数据库和Memcached的所有交互来保持膨胀 .
MicroMVC具有13 KB ORM,仅依赖于8 KB database class . 它还将所有结果作为ORM对象本身返回,并使用后期静态绑定来避免将有关当前对象的表和元数据的信息嵌入到每个对象中 . 这导致最便宜的ORM开销 .
它适用于MySQL,PostgreSQL和SQLite .
巴西ORM:http://www.hufersil.com.br/lumine . 它适用于PHP 5.2 . 在我看来,它是葡萄牙人和巴西人的最佳选择,因为它有易于理解的文档和大量下载示例 .
Agile Toolkit有自己独特的ORM / ActiveRecord和dynamic SQL实现 .
简介:http://agiletoolkit.org/intro/1
语法(Active Record):
$emp=$this->add('Model_Employee'); $emp['name']='John'; $emp['salary']=500; $emp->save();
语法(动态SQL):
$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面向PDO扩展 . 见PHP Faces Framework .
$urun = new Product(); $urun->name='CPU' $urun->prince='124'; $urun->save();
看看http://code.google.com/p/lworm/ . 它是一个非常简单但功能强大的轻量级ORM系统 . 如果需要,您还可以轻松扩展它 .
我们使用的另一个很棒的开源PHP ORM是PHPSmartDb . 它稳定,使您的代码更安全和干净 . 其中的数据库功能是我用过的最简单的PHP 5.3 .
30 回答
学说可能是你最好的选择 . 在Doctrine之前,DB_DataObject本质上是唯一一个开源的其他实用程序 .
看看Doctrine .
Doctrine 1.2实现Active Record . Doctrine 2+是DataMapper ORM .
另外,请查看Xyster . 它基于Data Mapper模式 .
另外,看看DataMapper vs. Active Record .
试试RedBean,它要求:
没有配置
没有数据库(它可以动态创建所有内容)
没有型号
等
它甚至可以为您执行所有锁定和事务处理,并在后台监视性能 . (哎呀!它甚至可以进行垃圾收集......)最重要的是......你不必写一行代码......耶稣 this ,ORM layer,救了我的屁股!
只有两个好的:Doctrine和Propel . 我们赞成Doctrine,它适用于Symfony . 但是,如果你必须编写自己的代码 .
Axon ORM是Fat-Free Framework的一部分 - 它具有即时映射器 . 没有代码生成器 . 没有愚蠢的XML / YAML配置文件 . 它直接从后端读取数据库模式,因此在大多数CRUD操作中,您甚至不必扩展基本模型 . 它适用于所有主要的PDO支持的数据库引擎:MySQL,_ SQLite,SQL Server / Sybase,Oracle,PostgreSQL等 .
最重要的是,插件和附带的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 . 它与Doctrine 1分开提及它,因为它从头开始重写,仍处于测试阶段,但它现在可用并开发了 .
这是一个非常复杂的ORM,但设计精良 . 原始主义1的许多魔法消失了 . 它提供了一个完整的解决方案,你可以write your own ORM on top of Doctrine2或只使用它的一个layers .
看看Outlet ORM . 它比Propel和Doctrine更简单,它的工作方式类似于Hibernate,只有更多的PHP感觉 .
我刚开始使用Kohana,它似乎最接近Ruby on Rails而没有调用多个配置文件的所有复杂性,例如Propel .
我真的很喜欢Propel,here你可以得到一个概述,documentation非常好,你可以通过PEAR或SVN获得它 .
您只需要安装PHP5,然后Phing开始生成类 .
我在PHP库Flourish中找到了与ORM相关的类 .
试试dORM, an object relational mapper for PHP 5 . 它支持各种关系(1对1),(1对多),(多对多)和数据类型 . 它完全不引人注目:不需要代码生成或类扩展 . 在我看来,它优于任何ORM,包括Doctrine和Propel . 但是,它仍处于测试阶段,并可能在未来几个月内发生重大变化 . http://www.getdorm.com
它的学习曲线也非常小 . 您将使用的三种主要方法是:
你应该看看Idiorm and Paris .
我目前正致力于phpDataMapper,这是一个ORM,其设计也具有简单的语法,如Ruby 's Datamapper project. It'仍然处于早期开发阶段,但它的工作原理很棒 .
试过ORM of Flourish library .
在PHP 5.3发布之前,不要期望有一个好的ORM . 这是PHP的OO限制 .
我和Idiorm and Paris有过很好的经历 . Idiorm是一个小而简单的ORM库 . 巴黎是一个基于Idiorm的同样简单的Active Record实现 . 它是完美的,如果你想要一些简单的东西,你可以放入现有的应用程序 .
我的朋友Kien和我已经改进了他在PHP 5.3之前编写的早期版本的ORM . 我们基本上移植了Ruby on Rails'Active Record到PHP . 它仍然缺少我们想要的一些关键功能,例如事务,复合主键支持,更多适配器(现在只有MySQL和SQLite 3工作) . 但是,我们非常接近完成这些事情 . 你可以看一下PHP ActiveRecord with PHP 5.3 .
试试PHP ADOdb .
我可以't say it'是最好的,因为我没有't used the others. But it'快,它支持Memcached和缓存 .
并且它比Zend Framework's DB / Select快得多 .
看看LEAP ORM for Kohana . 它适用于大量数据库,包括DB2,_ Drizzle,Firebird,MariaDB,SQL Server,MySQL,Oracle,PostgreSQL和SQLite . 使用简单的自动加载功能,它几乎可以与任何PHP框架一起使用 . 源代码位于GitHub,位于https://github.com/spadefoot/kohana-orm-leap . 您可以在线结账LEAP's tutorials .
ORM库使用非整数主键和复合键 . 连接通过数据库连接池进行管理,并且可以与原始SQL查询一起使用 . ORM甚至还有一个查询构建器,它使构建SQL语句变得非常简单 .
如果您有冒险精神,可以查看Repose . 与Outlet类似,它是在Hibernate之后建模的 .
它的开发还处于早期阶段,但到目前为止,对域模型的唯一限制是类没有标记为final,属性没有标记为private . 一旦我进入PHP> = 5.3的土地,我将尝试实现对私有属性的支持 .
如果您正在寻找实现Data Mapper范例而不是Active Record的ORM,那么我强烈建议您查看GacelaPHP .
Gacela特色:
数据映射器
外键映射
关联映射
依赖映射
具体表继承
查询对象
元数据映射
懒惰和急切的加载
完整Memcached支持
在开发任何远程复杂的东西时,其他ORM解决方案过于膨胀或存在繁重的限制 . Gacela通过实现数据映射器模式解决了活动记录方法的局限性,同时通过使用PDO与数据库和Memcached的所有交互来保持膨胀 .
MicroMVC具有13 KB ORM,仅依赖于8 KB database class . 它还将所有结果作为ORM对象本身返回,并使用后期静态绑定来避免将有关当前对象的表和元数据的信息嵌入到每个对象中 . 这导致最便宜的ORM开销 .
它适用于MySQL,PostgreSQL和SQLite .
巴西ORM:http://www.hufersil.com.br/lumine . 它适用于PHP 5.2 . 在我看来,它是葡萄牙人和巴西人的最佳选择,因为它有易于理解的文档和大量下载示例 .
Agile Toolkit有自己独特的ORM / ActiveRecord和dynamic SQL实现 .
简介:http://agiletoolkit.org/intro/1
语法(Active Record):
语法(动态SQL):
虽然Dynamic SQL和Active Record / ORM可以直接使用,但Agile Toolkit进一步将它们与用户界面和jQuery UI集成在一起 . 这类似于JSF,但是用纯PHP编写 .
这将为Employee模型显示AJAXified CRUD .
NotORM
我在miniOrm上工作 . 只是一个迷你ORM,尽可能简单地使用对象模型和MySQL抽象层 . 希望它可以帮到你:http://jelnivo.fr/miniOrm/
PHP ORM面向PDO扩展 . 见PHP Faces Framework .
看看http://code.google.com/p/lworm/ . 它是一个非常简单但功能强大的轻量级ORM系统 . 如果需要,您还可以轻松扩展它 .
我们使用的另一个很棒的开源PHP ORM是PHPSmartDb . 它稳定,使您的代码更安全和干净 . 其中的数据库功能是我用过的最简单的PHP 5.3 .