267

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

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

4

36 回答 36

120

教义

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

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

另外,看看DataMapper 与 Active Record的对比。

于 2008-09-20T16:47:58.790 回答
105

试试RedBean,它需要:

  • 无配置
  • 没有数据库(它即时创建所有内容)
  • 没有型号
  • 等等

它甚至为您执行所有锁定和事务,并在后台监控性能。(见鬼!它甚至可以进行垃圾收集......)最重要的是......你不必编写一个......一行代码......耶稣这个ORM层,救了我!

于 2009-05-14T12:36:13.857 回答
47

只有两个好:DoctrinePropel。我们喜欢 Doctrine,它与Symfony配合得很好。但是,如果您正在寻找除主要支持之外的数据库支持,您将不得不编写自己的代码。

于 2008-09-20T16:56:40.347 回答
34

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。

于 2010-08-01T17:05:45.743 回答
28

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

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

看看:Pork.dbObject

于 2008-09-21T00:40:41.683 回答
22

试试Doctrine2。它可能是 PHP 最强大的 ORM 工具。我将它与 Doctrine 1 分开提及,因为它是一个完全不同的软件。它已从头开始重写,仍处于测试阶段,但现在可以使用并已开发。

这是一个非常复杂的 ORM,但设计得很好。原始学说 1 中的许多魔法消失了。它提供了一个完整的解决方案,您可以在 Doctrine2 之上编写自己的 ORM或仅使用其中一个

于 2010-07-23T22:07:00.500 回答
13

我刚开始使用Kohana,它似乎最接近 Ruby on Rails,而无需像Propel那样调用多个配置文件的所有复杂性。

于 2008-10-21T23:02:34.957 回答
12

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

于 2008-09-22T20:22:36.277 回答
12

我真的很喜欢Propel在这里你可以得到一个概述,文档非常好,你可以通过 PEAR 或 SVN 获得它。

您只需要安装有效的 PHP5 和Phing即可开始生成类。

于 2008-09-20T18:36:33.820 回答
8

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

于 2010-08-03T15:33:04.347 回答
7

你应该看看Idiorm 和 Paris

于 2011-10-21T01:04:06.077 回答
6

试一试dORM ,一个 PHP 5 的对象关系映射器。它支持各种关系(1对1)、(1对多)、(多对多)和数据类型。它完全不显眼:不需要代码生成或类扩展。在我看来,它优于任何 ORM,包括 Doctrine 和 Propel。但是,它仍处于测试阶段,可能会在接下来的几个月内发生重大变化。http://www.getdorm.com

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

<?php 
$object = $dorm->getClassName('id_here');
$dorm->save($object);
$dorm->delete($object);
于 2009-04-28T01:28:12.657 回答
4

尝试了Flourish library 的 ORM

于 2010-08-23T21:09:58.600 回答
4

我目前正在研究phpDataMapper,这是一个 ORM,旨在具有像 Ruby 的 Datamapper 项目一样的简单语法。它仍处于早期开发阶段,但效果很好。

于 2009-01-13T19:52:36.217 回答
4

我在Idiorm 和 Paris有过很棒的经历。Idiorm 是一个小型、简单的 ORM 库。Paris 是一个基于 Idiorm 的同样简单的 Active Record 实现。它适用于带有 PDO 的 PHP 5.2+。如果您想要一些简单的东西,您可以直接放入现有的应用程序,那么它是完美的。

于 2011-07-10T22:03:18.307 回答
3

Until PHP 5.3 release don't expect to have a good ORM. It's a OO limitation of PHP.

于 2009-03-01T11:37:59.773 回答
3

看看Kohana 的 LEAP ORM。它适用于大量数据库,包括DB2DrizzleFirebirdMariaDB、SQL Server、MySQL、Oracle、PostgreSQLSQLite。通过一个简单的自动加载功能,它几乎可以与任何 PHP 框架一起使用。源代码位于https://github.com/spadefoot/kohana-orm-leap的GitHub上。您可以在线查看LEAP 的教程

ORM 库使用非整数主键和复合键。连接是通过数据库连接池管理的,它适用于原始 SQL 查询。ORM 甚至有一个查询构建器,可以让构建 SQL 语句变得超级简单。

于 2012-01-07T03:40:05.033 回答
3

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

于 2009-05-16T18:15:13.727 回答
3

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

于 2011-08-08T12:56:27.470 回答
3

试试 PHP ADOdb。

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

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

于 2009-07-17T16:29:46.500 回答
2

非规范

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";
}
于 2012-07-20T08:31:14.503 回答
2

如果您喜欢冒险,可以查看Repose 。Outlet一样,它是仿照Hibernate的。

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

于 2009-01-05T03:44:47.397 回答
2

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

它适用于MySQLPostgreSQLSQLite

于 2012-02-23T22:32:24.433 回答
2

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

加塞拉特点:

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

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

于 2011-07-02T15:21:21.443 回答
2

Agile Toolkit有自己独特的 ORM/ActiveRecord 和动态 SQL实现。

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

语法(活动记录):

$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 。

于 2011-10-24T08:26:56.300 回答
1

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

于 2010-11-19T16:07:15.967 回答
1

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

于 2011-03-15T06:57:47.513 回答
1

教义可能是你最好的选择。在 Doctrine 之前,DB_DataObject本质上是唯一开源的其他实用程序。

于 2008-09-20T18:13:58.180 回答
1

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

于 2010-03-16T05:00:37.457 回答
1

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

于 2011-02-09T11:17:32.100 回答
1

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

于 2012-10-27T17:22:03.217 回答
1

如果你正在寻找一个 ORM,比如Hibernate,你应该看看PMO

它可以很容易地集成到SOA架构中(只需开发一个 Web 服务类)。

于 2009-05-03T07:05:30.090 回答
1

用于 PDO 扩展的 PHP ORM Faces。请参阅PHP Faces 框架

$urun = new Product();
$urun->name='CPU'
$urun->prince='124';
$urun->save();
于 2009-11-05T05:31:59.430 回答
1

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

于 2011-06-22T20:47:23.493 回答
1

尝试PdoMap。维基百科声称这是受到 Hibernate 的启发。由于我从未使用过 Hibernate,因此无法判断 :),但根据我的经验,我会说 ORM 好且快速,易于实现,学习曲线比其他 ORM 不那么陡峭。

于 2011-03-02T18:48:50.127 回答
1

一个非常好的简单 ORM 是MyActiveRecordMyActiveRecord 文档。我一直在使用它,可以说它非常简单且经过良好测试。

于 2011-01-20T09:13:15.127 回答