好的PHP ORM库?

时间:2008-09-20 16:44:52

标签: php database orm

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

我知道PDO / ADO,但它们似乎只提供数据库供应商之间差异的抽象,而不是域模型和关系模型之间的实际映射。我正在寻找一个PHP库,其功能类似于Hibernate对Java和NHibernate对.NET的作用。

36 个答案:

答案 0 :(得分:113)

查看Doctrine

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

另外,请查看Xyster。它基于Data Mapper模式。

另外,请查看DataMapper vs. Active Record

答案 1 :(得分:99)

尝试RedBean,需要:

  • 无配置
  • 没有数据库(它可以动态创建所有内容)
  • 没有型号

它甚至为您执行所有锁定和事务,并在后台监视性能。 (哎呀!它甚至可以进行垃圾收集....)最重要的是......你不需要写一行......代码......耶稣 this < / em> ORM layer,救了我屁股!

答案 2 :(得分:45)

只有两个好的:DoctrinePropel。我们赞成Doctrine,它适用于Symfony。但是,如果您正在寻找除主要数据库支持之外的数据库支持,则必须编写自己的代码。

答案 3 :(得分:33)

Axon ORM是Fat-Free Framework的一部分 - 它具有即时映射器。没有代码生成器。没有愚蠢的XML / YAML配置文件。它直接从后端读取数据库模式,因此在大多数CRUD操作中,您甚至不必扩展基本模型。它适用于所有主要的PDO支持的数据库引擎:MySQLSQLiteSQL 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。

答案 4 :(得分:28)

我一直在自己开发Pork.dbObject。 (一个简单的PHP ORM和Active Record实现) 主要原因是我发现大多数ORM太重了。

Pork.dbObejct的主要思想是重量轻,设置简单。没有一堆XML文件,只是构造函数中的一个函数调用来绑定它,以及addRelation或addCustomRelation来定义与另一个dbObject的关系。

看一看:Pork.dbObject

答案 5 :(得分:22)

答案 6 :(得分:13)

我刚开始使用Kohana,它似乎最接近Ruby on Rails而没有调用多个配置文件的所有复杂性,例如Propel

答案 7 :(得分:12)

结帐Outlet ORM。它比Propel和Doctrine更简单,它的工作方式类似于Hibernate,只有更多的PHP感觉。

答案 8 :(得分:11)

我非常喜欢Propelhere您可以获得概述,documentation非常好,您可以通过PEAR或SVN获取它。

您只需安装PHP5,Phing即可开始生成类。

答案 9 :(得分:8)

我在PHP库Flourish中找到了与ORM相关的类。

答案 10 :(得分:6)

您应该查看Idiorm and Paris

答案 11 :(得分:6)

快照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);

答案 12 :(得分:4)

答案 13 :(得分:4)

我目前正致力于phpDataMapper,这是一个ORM,旨在提供类似Ruby的Datamapper项目的简单语法。它仍处于早期开发阶段,但效果很好。

答案 14 :(得分:3)

尝试PHP ADOdb。

我不能说这是最好的,因为我没有使用过其他人。但它很快,它支持Memcached和缓存。

它比Zend Framework's DB / Select更快。

答案 15 :(得分:3)

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

答案 16 :(得分:3)

查看LEAP ORM for Kohana。它适用于大量数据库,包括DB2DrizzleFirebirdMariaDB,SQL Server,MySQL,Oracle,PostgreSQL,和SQLite。使用简单的自动加载功能,它几乎可以与任何PHP框架一起使用。源代码位于GitHub https://github.com/spadefoot/kohana-orm-leap。您可以在线结帐LEAP's tutorials

ORM库使用非整数主键和复合键。连接通过数据库连接池进行管理,并且可以与原始SQL查询一起使用。 ORM甚至还有一个查询构建器,它使构建SQL语句变得非常简单。

答案 17 :(得分:3)

在PHP 5.3发布之前,不要期望有一个好的ORM。这是PHP的OO限制。

答案 18 :(得分:3)

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

答案 19 :(得分:2)

我在miniOrm上工作。只是一个迷你ORM,用于使用对象模型&amp; MySQL Abstraction Layer尽可能简单。希望它可以帮到你:http://jelnivo.fr/miniOrm/

答案 20 :(得分:2)

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

答案 21 :(得分:2)

MicroMVC有一个13 KB ORM,只依赖于8 KB database class。它还将所有结果作为ORM对象本身返回,并使用后期静态绑定来避免将有关当前对象的表和元数据的信息嵌入到每个对象中。这导致了最便宜的ORM开销。

适用于MySQLPostgreSQLSQLite

答案 22 :(得分: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();

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

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

这将显示AJAXified CRUD for Employee model。

答案 23 :(得分:2)

如果您有冒险精神,可以查看Repose。与Outlet类似,它是在Hibernate之后建模的。

它的开发还处于早期阶段,但到目前为止,对域模型的唯一限制是类没有标记为final,属性没有标记为private。一旦我进入PHP&gt; = 5.3的土地,我将尝试实现对私有属性的支持。

答案 24 :(得分:2)

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

答案 25 :(得分:2)

如果您正在寻找实现Data Mapper范例而不是Active Record的ORM,那么我强烈建议您查看GacelaPHP

Gacela的特点:

  • 数据映射器
  • 外键映射
  • 关联映射
  • 依赖映射
  • 具体表继承
  • 查询对象
  • 元数据映射
  • 懒惰&amp;急切的装载
  • 完整Memcached支持

在开发任何远程复杂的东西时,其他ORM解决方案过于膨胀或存在繁重的限制。 Gacela通过实现数据映射器模式解决了活动记录方法的局限性,同时通过将PDO用于与数据库和Memcached的所有交互来保持膨胀最小化。

答案 26 :(得分:2)

PHP ORM Faces用于PDO扩展。请参阅 PHP Faces Framework

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

答案 27 :(得分:1)

Sado是一个简单的PHP ORM包,易于使用,并提供视频教程

答案 28 :(得分:1)

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

答案 29 :(得分:1)

试试PdoMap。维基百科声称受Hibernate的启发。由于我从未使用过Hibernate,我无法判断:),但我会从我的经验中说,这是一款易于实现的优秀且快速的ORM,其学习曲线与其他ORM相比不那么陡峭。

答案 30 :(得分:1)

看着Syrius ORM。这是一个新的ORM,该项目处于开发阶段,但在下一个版本中它将以1.0版本发布。

答案 31 :(得分:1)

一个非常好的简单ORM是MyActiveRecordMyActiveRecord documentation。我一直在使用它,并且可以说它非常简单且经过充分测试。

答案 32 :(得分:1)

看看http://code.google.com/p/lworm/。它是一个非常简单但功能强大的轻量级ORM系统。如果需要,您还可以轻松扩展它。

答案 33 :(得分:1)

学说可能是你最好的选择。在Doctrine之前,DB_DataObject基本上是唯一一个开源的实用程序。

答案 34 :(得分:1)

如果您正在寻找ORM,例如Hibernate,则应该查看PMO

它可以很容易地集成到SOA架构中(只需要开发一个webservice classe)。

答案 35 :(得分:1)

QCubed framework中包含了一个非常棒的ORM;它基于代码生成和脚手架。与基于反射并且通常很慢的ActiveRecord不同,代码生成基于数据库为您创建框架类,并允许您在之后自定义它们。它就像一个魅力。