PHP有好的对象关系映射库吗?
我知道PDO/ADO,但它们似乎只提供了数据库供应商之间差异的抽象,而不是域模型和关系模型之间的实际映射。我正在寻找一个PHP库,功能类似于Hibernate为Java和NHibernate为。net所做的方式。
PHP有好的对象关系映射库吗?
我知道PDO/ADO,但它们似乎只提供了数据库供应商之间差异的抽象,而不是域模型和关系模型之间的实际映射。我正在寻找一个PHP库,功能类似于Hibernate为Java和NHibernate为。net所做的方式。
看看《教义》。
Doctrine 1.2实现了活动记录。Doctrine 2+是一个DataMapper ORM。
还有,看看Xyster。它基于Data Mapper模式。
另外,看看DataMapper和活动记录。
好的只有两个:Doctrine和Propel。我们喜欢Doctrine,它和Symfony配合得很好。然而,如果你正在寻找数据库支持之外的主要,你将不得不编写自己的代码。
我一直在培养波克。dbObject在我自己。(一个简单的PHP ORM和活动记录实现) 主要原因是我发现大多数orm太重了。
波克的主要思想。dbObejct是轻量级的,易于设置。没有一堆XML文件,只有构造函数中的一个函数调用来绑定它,以及一个addRelation或addCustomRelation来定义与另一个dbObject的关系。
看一下:Pork.dbObject
如果你喜欢冒险,可以试试Repose。与Outlet一样,它也模仿Hibernate。
它仍然处于开发的早期阶段,但到目前为止,域模型的唯一限制是类没有标记为final,属性没有标记为private。一旦我进入了PHP >= 5.3的领域,我将尝试实现对私有属性的支持。
让我们尝试一下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);
试试红豆,它要求:
没有配置 没有数据库(一切都是动态创建的) 没有模型 等。
它甚至为您执行所有的锁定和事务,并在后台监视性能。(见鬼!它甚至做垃圾收集....)最棒的是……你不必写一首……代码行…天哪,ORM层救了我!
我的朋友Kien和我对他在PHP 5.3之前编写的ORM的早期版本进行了改进。我们实际上已经将Ruby on Rails的活动记录移植到PHP。它仍然缺少一些我们想要的关键特性,比如事务,复合主键支持,更多的适配器(目前只有MySQL和SQLite 3可用)。但是,我们已经非常接近完成这些工作了。你可以看看带有PHP 5.3的PHP ActiveRecord。
试试PHP ADOdb吧。
我不能说它是最好的,因为我没有用过其他的。但是它很快,它支持Memcached和缓存。
而且它比Zend Framework的DB/Select快多了。
PHP ORM面向PDO扩展。参见PHP Faces Framework。
$urun = new Product();
$urun->name='CPU'
$urun->prince='124';
$urun->save();
qcube框架中包含了一个很棒的ORM;它基于代码生成和搭建。与基于反射的ActiveRecord不同,代码生成基于数据库为您生成骨架类,然后让您自定义它们。这招很管用。
Doctrine2试试。它可能是最强大的PHP ORM工具。我把它和教义一分开提,因为它是完全不同的软件。它是从头重写的,仍然处于测试阶段,但现在已经可以使用了。
这是一个非常复杂的ORM,但设计得很好。第一条教义中的很多魔法都消失了。它提供了一个完整的解决方案,您可以在Doctrine2的基础上编写自己的ORM,也可以只使用其中的一个层。
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)。Fat-Free只有55kb。
PdoMap试试。维基百科称其灵感来自Hibernate。因为我从未使用过Hibernate,所以我无法判断:),但根据我的经验,我想说的是,它是一种好的、快速的ORM,易于实现,学习曲线不像其他ORM那么陡峭。
我们使用的另一个很棒的开源PHP ORM是PHPSmartDb。它是稳定的,使您的代码更加安全和干净。其中的数据库功能是我在PHP 5.3中使用过的最简单的功能。
如果您正在寻找一个实现数据映射器范式(而不是专门实现活动记录)的ORM,那么我强烈建议您考虑一下GacelaPHP。
Gacela特点:
数据映射器 外键映射 关联映射 依赖映射 具体表继承 查询对象 元数据映射 懒惰和急于装载 完全支持Memcached
其他ORM解决方案在开发任何远程复杂的东西时都过于臃肿或具有繁重的限制。通过实现数据映射器模式,Gacela解决了活动记录方法的局限性,同时通过在与数据库和Memcached的所有交互中使用PDO将膨胀保持在最低限度。
我在Idiorm和巴黎都有很好的经历。Idiorm是一个小而简单的ORM库。Paris是在Idiorm上构建的一个同样简单的活动记录实现。它是PHP 5.2+ PDO。如果您想要一些简单的东西,可以直接放到现有的应用程序中,那么它是完美的。
巴西ORM: http://www.hufersil.com.br/lumine。它适用于PHP 5.2+。在我看来,它是葡萄牙人和巴西人的最佳选择,因为它有易于理解的文档和大量的示例可供下载。
敏捷工具包有自己独特的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();
虽然可以直接使用动态SQL和活动记录/ORM,但敏捷工具包进一步将它们与用户界面和jQuery UI集成在一起。这类似于JSF,但是用纯PHP编写。
$this->add('CRUD')->setModel('Employee');
这将显示ajax化的CRUD with for Employee模型。
看看Kohana的LEAP ORM。它可以与一系列数据库一起工作,包括DB2、Drizzle、Firebird、MariaDB、SQL Server、MySQL、Oracle、PostgreSQL和SQLite。通过一个简单的自动加载函数,它可以与几乎任何PHP框架一起工作。源代码在GitHub上https://github.com/spadefoot/kohana-orm-leap。你可以在线查看LEAP的教程。
ORM库使用非整数主键和复合键。连接是通过数据库连接池管理的,它与原始SQL查询一起工作。ORM甚至有一个查询构建器,使构建SQL语句超级简单。
MicroMVC有一个13 KB的ORM,它只依赖于一个8 KB的数据库类。它还将所有结果作为ORM对象本身返回,并使用后期静态绑定来避免将有关当前对象的表和元数据的信息嵌入到每个对象中。这导致了最便宜的ORM开销。
它适用于MySQL, PostgreSQL和SQLite。
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/