Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
好的PHP ORM库?_Php_Database_Orm - Fatal编程技术网

好的PHP ORM库?

好的PHP ORM库?,php,database,orm,Php,Database,Orm,是否有一个好的PHP对象关系映射库 我知道/ADO,但它们似乎只提供数据库供应商之间差异的抽象,而不是域模型和关系模型之间的实际映射。我正在寻找一个PHP库,它的功能类似于Java和NHibernate对.NET的功能 实现活动记录。是一个数据映射程序ORM 还有,看看。它基于数据映射器模式 另外,看看。只有两个好的:和。我们倾向于信条,而且它与我们的关系很好。但是,如果您正在寻找除主要支持之外的数据库支持,则必须编写自己的代码。原则可能是您最好的选择。在Doctrine之前,它本质上是唯一一个

是否有一个好的PHP对象关系映射库

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

实现活动记录。是一个数据映射程序ORM

还有,看看。它基于数据映射器模式


另外,看看。

只有两个好的:和。我们倾向于信条,而且它与我们的关系很好。但是,如果您正在寻找除主要支持之外的数据库支持,则必须编写自己的代码。

原则可能是您最好的选择。在Doctrine之前,它本质上是唯一一个开源的实用程序。

我真的很喜欢,你可以得到一个概述,它非常好,你可以通过PEAR或SVN获得它


您只需要安装一个正常工作的PHP5,就可以开始生成类。

我一直在自己开发Pork.dbObject。(一个简单的PHP ORM和活动记录实现) 主要原因是我发现大多数的字体都太重了

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

看一看:

退房。它比Propel和Doctrine更简单,其工作原理与Hibernate类似,只是更像是一种PHP风格。

我刚开始使用它,它似乎最接近Ruby on Rails,而不需要调用多个配置文件的复杂性,比如。就像,它是模仿的


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

我目前正在研究的是一种ORM,它设计的语法非常简单,就像Ruby的Datamapper项目一样。它还处于早期开发阶段,但它工作得很好。

在PHP5.3发布之前,不要指望有一个好的ORM。这是PHP的OO限制。

试一试。它支持各种关系(1对1)、(1对多)、(多对多)和数据类型。它完全不引人注目:不需要代码生成或类扩展。在我看来,它优于任何ORM,包括条令和推进。然而,它仍处于测试阶段,可能在未来几个月内发生重大变化

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

<?php 
$object = $dorm->getClassName('id_here');
$dorm->save($object);
$dorm->delete($object);

如果您正在寻找一个ORM,比如,您应该看看

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

试试看,它需要:

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

它甚至为您执行所有锁定和事务,并在后台监控性能。(见鬼!它甚至还做垃圾收集……)最棒的是。。。你不必写一个。。。代码行。。。耶稣救了我一命

我和我的朋友Kien改进了他在PHP5.3之前编写的ORM的早期版本。我们基本上已经将RubyonRails移植到PHP。它仍然缺少一些我们想要的关键特性,比如事务、复合主键支持、更多的适配器(现在只有MySQL和SQLite 3可以工作)。但是,我们很快就要完成这件事了。您可以看看。

试试PHP ADOdb

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


而且它比DB/Select快。

用于PDO扩展的PHP ORM Faces。看

试试看。它可能是PHP最强大的ORM工具。我把它和第一条原则分开提,因为它是一个完全不同的软件。它已经从零开始重写,仍处于测试阶段,但现在可以使用并得到开发

这是一个非常复杂的ORM,但设计得很好。原教条1中的许多魔法消失了。它提供了一个完整的解决方案,您可以或只使用其中一个。

Axon ORM是的一部分-它具有一个动态映射器。没有代码生成器。没有愚蠢的XML/配置文件。它直接从后端读取数据库模式,因此在大多数操作中,您甚至不必扩展基本模型。它适用于所有主要受支持的数据库引擎:、/Sybase、Oracle等


最重要的是,插件和附带的SQL数据访问层与框架一样轻量级:14KB(Axon)+6KB(SQLdb)。无脂肪只有55KB。

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

尝试了。

查看。这是一个非常简单、功能强大、轻量级的PHP ORM系统。如果需要,您还可以轻松地扩展它

我们使用的另一个伟大的开源PHP ORM是。它是稳定的,使您的代码更加安全和干净。其中的数据库功能是我在PHP5.3中使用过的最简单的功能。

如果您正在寻找一种实现数据映射器范例而不是特定于Active Record的ORM,那么我强烈建议您看看

Gacela功能:

  • 数据映射器
  • 外键映射
  • 关联映射
  • 相依映射
  • 具体表继承
  • 查询对象
  • 元数据映射
  • 懒惰和渴望加载
  • 全力支持
当开发任何远程复杂的东西时,其他ORM解决方案过于臃肿或有着繁重的限制。Gacela解决了
$urun = new Product();
$urun->name='CPU'
$urun->prince='124';
$urun->save();
/* 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();
$emp=$this->add('Model_Employee');
$emp['name']='John';
$emp['salary']=500;
$emp->save();
$result = $emp->count()->where('salary','>',400)->getOne();
$this->add('CRUD')->setModel('Employee');
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";
}