好的PHP ORM库?

sgi*_*ons 268 php database orm

PHP有一个很好的对象关系映射库吗?

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

Ian*_*n P 116

看看学说.

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

另外,看看Xyster.它基于Data Mapper模式.

另外,请查看DataMapper与Active Record.


小智 101

试试RedBean,它要求:

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

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

  • redbean是我曾经使用过的最好的数据库抽象层.不是"最好的"之一 - 最好的. (9认同)
  • 但是:http://stackoverflow.com/questions/3212917/redbean-o-rm-store-date-as-varchar255 (6认同)
  • +1 +1 +1 +!+!!!!! ...耶稣我读了文档的第一部分,它让我做出了阴险的独裁者笑声,我已经下载了它! (3认同)

Ily*_*tov 45

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

  • 由于这个问题与此有很多联系,我想指出,截至 2020 年,Propel 是一个已停产的项目。PHP7 兼容性从未实现。因此,在 2020 年选择 Propel 作为新软件项目的 ORM 并不是一个好主意。 (3认同)
  • @mrodo Propel 并未停止。针对 PHP 7.2 及更高版本的 Propel 版本 2 仍在积极开发中。 (2认同)

bco*_*sca 33

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();
Run Code Online (Sandbox Code Playgroud)

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

  • 当我在一个例子中看到类似`$ product-> load('product_id = 123')的东西时,它总是让我担心. (14认同)
  • 对于偏执狂,替代语法是`$ product-> load(array('product_id =:id',array(':id'=> 123)));` (8认同)
  • Fat-Free还为MongoDB和平面文件提供NoSQL ORM (4认同)

Sch*_*kie 28

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

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

看看:Pork.dbObject

  • Duude!这非常有趣.我看到最新的更新发生在09年的某个地方.这仍然保持?如果不是......我可能会复活它:) (5认同)

Tom*_*rek 22

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

这是一个非常复杂的ORM,但设计精良.原始主义1的许多魔法消失了.它提供了一个完整的解决方案,您可以在Doctrine2之上编写自己的ORM,或只使用其中一个.

  • @jblue:这不是问题,它是一个功能;-).像Doctrine这样的大型库需要命名空间. (8认同)

Zak*_*Zak 13

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


小智 12

查看Outlet ORM.它比Propel和Doctrine更简单,它的工作方式类似于Hibernate,只有更多的PHP感觉.

  • 我试过这个.我不得不在3个地方指定相同的对象属性 - 配置,模型和数据库模式.这是实施ORM IMO的大量工作. (3认同)

CMS*_*CMS 11

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

您只需要一个有效的PHP5安装,并且Phing可以开始生成类.


VDV*_*eon 8

我在PHP库蓬勃发展中找到了与ORM相关的类.


Oli*_*nde 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);
Run Code Online (Sandbox Code Playgroud)

  • 链接坏了吗? (2认同)

小智 6

你应该看看Idiorm和巴黎.