PHP有好的对象关系映射库吗?
我知道PDO/ADO,但它们似乎只提供了数据库供应商之间差异的抽象,而不是域模型和关系模型之间的实际映射。我正在寻找一个PHP库,功能类似于Hibernate为Java和NHibernate为。net所做的方式。
PHP有好的对象关系映射库吗?
我知道PDO/ADO,但它们似乎只提供了数据库供应商之间差异的抽象,而不是域模型和关系模型之间的实际映射。我正在寻找一个PHP库,功能类似于Hibernate为Java和NHibernate为。net所做的方式。
当前回答
我一直在培养波克。dbObject在我自己。(一个简单的PHP ORM和活动记录实现) 主要原因是我发现大多数orm太重了。
波克的主要思想。dbObejct是轻量级的,易于设置。没有一堆XML文件,只有构造函数中的一个函数调用来绑定它,以及一个addRelation或addCustomRelation来定义与另一个dbObject的关系。
看一下:Pork.dbObject
其他回答
我一直在培养波克。dbObject在我自己。(一个简单的PHP ORM和活动记录实现) 主要原因是我发现大多数orm太重了。
波克的主要思想。dbObejct是轻量级的,易于设置。没有一堆XML文件,只有构造函数中的一个函数调用来绑定它,以及一个addRelation或addCustomRelation来定义与另一个dbObject的关系。
看一下:Pork.dbObject
敏捷工具包有自己独特的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模型。
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";
}
让我们尝试一下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);
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。