PHP 有没有好的对象关系映射库?
我知道PDO /ADO,但它们似乎只提供数据库供应商之间差异的抽象,而不是域模型和关系模型之间的实际映射。我正在寻找一个 PHP 库,其功能类似于Hibernate为 Java 所做的方式和 NHibernate 为 .NET 所做的方式。
看教义。
Doctrine 1.2实现了 Active Record。Doctrine 2+是一个 DataMapper ORM。
另外,请查看Xyster。它基于数据映射器模式。
另外,看看DataMapper 与 Active Record的对比。
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 的关系。
试试Doctrine2。它可能是 PHP 最强大的 ORM 工具。我将它与 Doctrine 1 分开提及,因为它是一个完全不同的软件。它已从头开始重写,仍处于测试阶段,但现在可以使用并已开发。
这是一个非常复杂的 ORM,但设计得很好。原始学说 1 中的许多魔法消失了。它提供了一个完整的解决方案,您可以在 Doctrine2 之上编写自己的 ORM或仅使用其中一个层。
查看出口 ORM。它比 Propel 和 Doctrine 更简单,它的工作方式类似于 Hibernate,只是对它有更多的 PHP 感觉。
我在 PHP 库Flourish中找到了 ORM 相关的类。
你应该看看Idiorm 和 Paris。
试一试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);
我目前正在研究phpDataMapper,这是一个 ORM,旨在具有像 Ruby 的 Datamapper 项目一样的简单语法。它仍处于早期开发阶段,但效果很好。
我在Idiorm 和 Paris有过很棒的经历。Idiorm 是一个小型、简单的 ORM 库。Paris 是一个基于 Idiorm 的同样简单的 Active Record 实现。它适用于带有 PDO 的 PHP 5.2+。如果您想要一些简单的东西,您可以直接放入现有的应用程序,那么它是完美的。
Until PHP 5.3 release don't expect to have a good ORM. It's a OO limitation of PHP.
看看Kohana 的 LEAP ORM。它适用于大量数据库,包括DB2、Drizzle、Firebird、MariaDB、SQL Server、MySQL、Oracle、PostgreSQL和SQLite。通过一个简单的自动加载功能,它几乎可以与任何 PHP 框架一起使用。源代码位于https://github.com/spadefoot/kohana-orm-leap的GitHub上。您可以在线查看LEAP 的教程。
ORM 库使用非整数主键和复合键。连接是通过数据库连接池管理的,它适用于原始 SQL 查询。ORM 甚至有一个查询构建器,可以让构建 SQL 语句变得超级简单。
我的朋友 Kien 和我对他在 PHP 5.3 之前编写的 ORM 的早期版本进行了改进。我们基本上已经将 Ruby on Rails 的Active Record移植到 PHP。它仍然缺少一些我们想要的关键特性,例如事务、复合主键支持、更多适配器(目前只有 MySQL 和 SQLite 3 可以工作)。但是,我们非常接近完成这些工作。你可以看看PHP ActiveRecord with PHP 5.3。
巴西 ORM:http ://www.hufersil.com.br/lumine 。它适用于 PHP 5.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";
}
MicroMVC 有一个 13 KB 的ORM,它只依赖于一个 8 KB 的数据库类。它还将所有结果作为 ORM 对象本身返回,并使用后期静态绑定来避免将有关当前对象的表和元数据的信息嵌入到每个对象中。这导致了最便宜的 ORM 开销。
它适用于MySQL、PostgreSQL和SQLite。
如果您正在寻找一个实现 Data Mapper 范例而不是专门的 Active Record 的 ORM,那么我强烈建议您看看GacelaPHP。
加塞拉特点:
在开发任何远程复杂的东西时,其他 ORM 解决方案过于臃肿或有繁重的限制。Gacela 通过实现数据映射器模式解决了活动记录方法的局限性,同时通过使用PDO与数据库和 Memcached 进行所有交互来将膨胀降至最低。
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 。
查看http://code.google.com/p/lworm/。这是一个非常简单但功能强大的轻量级 PHP ORM 系统。如果需要,您也可以轻松扩展它。
我们使用的另一个很棒的开源 PHP ORM 是PHPSmartDb。它是稳定的,使您的代码更加安全和干净。其中的数据库功能无疑是我在 PHP 5.3 中使用过的最简单的功能。
教义可能是你最好的选择。在 Doctrine 之前,DB_DataObject本质上是唯一开源的其他实用程序。
QCubed 框架中包含一个很棒的 ORM ;它基于代码生成和脚手架。与基于反射且通常速度较慢的 ActiveRecord 不同,代码生成基于数据库为您创建骨架类,并允许您在之后自定义它们。它就像一个魅力。
看着Syrius ORM。它是一个新的 ORM,该项目处于开发阶段,但下一个口它将以 1.0 版本发布。
我在 miniOrm 上工作。只是一个迷你 ORM,用于尽可能简单地使用对象模型和 MySQL 抽象层。希望它可以帮助你:http: //jelnivo.fr/miniOrm/
用于 PDO 扩展的 PHP ORM Faces。请参阅PHP Faces 框架。
$urun = new Product();
$urun->name='CPU'
$urun->prince='124';
$urun->save();
Sado是一个简单的 PHP ORM 包,易于使用,并提供视频教程
尝试PdoMap。维基百科声称这是受到 Hibernate 的启发。由于我从未使用过 Hibernate,因此无法判断 :),但根据我的经验,我会说 ORM 好且快速,易于实现,学习曲线比其他 ORM 不那么陡峭。
一个非常好的简单 ORM 是MyActiveRecord。MyActiveRecord 文档。我一直在使用它,可以说它非常简单且经过良好测试。