什么是最容易使用的PHP ORM框架?

时间:2008-10-20 22:54:25

标签: php orm

我正在寻找Ruby的PHP活动记录。这么简单,我只是定义我的字段,扩展基础ORM类,我免费获得ACID操作。我应该在不编写任何代码的情况下获取默认的getter和setter,但是覆盖默认的getter或setter就像声明get $ fieldName或使用我想要的行为设置$ fieldName函数一样简单。 Symphony使您可以为每个对象创建大约5个文件,并且所有已定义的对象始终会加载到我所知的范围内。什么是更好的选择?为什么更好?你能在答案中加上简单的例子吗?

除了交响乐之外,我还看过另一个ORM。您还需要创建描述数据结构的yaml文件。数据库已经定义了这个东西。什么只是读取我的表defs而不必在任何地方生成和存储配置文件?

13 个答案:

答案 0 :(得分:11)

我是Doctrine的忠实粉丝,这是一个全功能的ORM,它将取代Propel作为Symfony的默认ORM。

它有你期望的基本ORM内容以及我发现很棒的全功能查询构建器。

它附带了一整套命令行工具来管理您的数据库。例如,你可以创建你在YAML模式和固定装置,有学说基于您的架构类,创建数据库,创建基于模型的架构,然后填充你的灯具数据库中所有与单一./doctrine build-all-reload

它还包括对数据库迁移的支持以及recently updated迁移以自动区分和生成迁移模型。

按照您的理论投诉,您可以运行命令./doctrine generate-models-db./doctrine generate-yaml-db自动分别从当前数据库设置创建模型和YAML文件。

其他细节包括“Behaviors”,它可以在您的架构中实现某些行为时更轻松。例如,您可以将“Timestampable”行为添加到类文件中。 Doctine会自动添加'created_at'和'updated_at'列,填充它们,并且您运行的每个$object->save()都会自动更新'updated_at'列。更复杂的行为包括i18n,表版本控制和树(尽管实际上只有NestedSet)。

就个人而言,我一直非常迷恋于学说并且每次机会都对它赞不绝口。

答案 1 :(得分:9)

我使用一个名为redbean的鲜为人知的orm层。 你可以在这里找到它:http://www.redbeanphp.com。 它的绝对独特之处在于它只是创建表列和索引,而不需要任何配置文件。我发现这是一个巨大的节省时间!

答案 2 :(得分:6)

CodeIgniter(http://codeigniter.com/user_guide/database/active_record.html)及其PHP5仅fork Kohana(http://docs.kohanaphp.com/libraries/orm)包含ActiveRecord模式的实现。

答案 3 :(得分:5)

我创造了自己的,没有臃肿。 (虽然我需要更新我的现场资源)

我完全按照您提到的要点创建它:没有几十个xml文件,没有庞大的框架,只有简单的构造函数,数据库到属性mappigns,它执行基本的CRUD /查找/加入。对于我做的大多数事情,我甚至不需要编写自定义查询。

我之前在my site上写过所有这些内容,请务必查看basic examples以了解相关信息。

我将发布的下一个版本带有加入连接的工作单行连接(通过数据库走“路径”),基于ini的数据库设置,跨数据库支持,超简单数据库抽象和标准如果数据库已关闭,则记录器会回退到SQLite。

如果你对这些更新感兴趣,请大声说出来,然后我就会急于求成。

哦,是的,不要忘记,还有一个很好的视觉脚手架生成器叫Pork.Generator。它试图分析你的数据库结构并找到1:1 1:很多很多:很多关系,并且可以自动为你生成类:-) relations found in database
(来源:schizofreend.nl

答案 4 :(得分:4)

Zend_Db_TableZend_Db_Table_Row相当擅长您所描述的内容。您不需要任何配置文件,大多数元数据都是从数据库本身“发现”的。

从技术上讲,这些类不实现ActiveRecord模式。相反,他们实施Table Data GatewayRow Data Gateway模式。它们共同提供与ActiveRecord类似的价值,并且在某些方面比ActiveRecord更灵活。

但与任何ORM一样,不可避免地会有一些SQL查询和操作无法通过OO接口完成。没有ORM可以作为一站式购物。

脚注:我在Zend Framework项目上工作了一年多,特别是在Zend_Db组件上。但我不再为他们工作了。

答案 5 :(得分:1)

检查可维护框架。虽然我更喜欢代码生成而不是ActiveRecord(运行时反射),但我发现Maintainable框架易于使用,特别是在ORM功能方面。

http://framework.maintainable.com/mvc/3_model.php#c3.7

如果您想要基于代码生成的框架,请尝试QCodo。无论dcousineau为Doctrine说什么,我都可以为Qcodo说。这是一个模仿.NET / Delphi的事件驱动的完整框架。但是,您可以只编写代码生成功能,并找到将生成的类别与框架的其余部分分离的方法。因此,您可以将生成的类别嵌入到其他框架中。

答案 6 :(得分:1)

Ruby DataMapper实现之后的另一个选项是phpDataMapper。它显然是一个Data Mapper而不是ActiveRecord :)。

答案 7 :(得分:1)

我会推荐使用Symfony的Doctrine。尽管还有更多要学习的内容,但您会发现它具有项目增长后需要的功能(CRUD,表单框架,记录模板,DQL,插件支持,行为)。这两个项目都有非常活跃的社区,你不应该发现自己处于死胡同,因为你的大多数问题已经在官方教程或论坛中得到了解答。

如果您不喜欢YAML中的数据库定义,则可以始终使用ORM Designer或MySQL Workbench。

答案 8 :(得分:0)

我建议QCubed。它是一个非常强大的PHP5-only ORM框架,专注于代码生成,UI脚手架和快速应用程序开发。看一下培训视频:http://qcu.be/content/video-screencasts

答案 9 :(得分:0)

http://dbphp.net

赞成

  • 即时生成/修改数据库/表格/字段/各种表格/字段属性。
  • 无需安装。
  • 根本没有配置。
  • 只需要包含库并指定数据库链接参数即可开始工作。
  • 内置了本地化支持。
  • 它具有各种缓存级别,并允许扩展缓存引擎。
  • 同时适用于多种不同的数据库连接。
  • 它可以在位于其他数据库服务器中的表之间建立关系。
  • 它使用类和变量doc注释提取表/字段属性。

缺点

  • 它仅适用于对象。即你必须有定义的类,并有类的实例来保存负载等。
  • 它没有网站,但有示例文件夹。

答案 10 :(得分:0)

我喜欢Idiorm and Paris并在小项目中使用它们。 Idiorm是实际的ORM,而巴黎是积极的记录实施。您可以使用自己喜欢的任何一种。

还有一个名为Granada的分叉,它建立在Idiorm和巴黎之上,并增加了支持,如急切加载等。

答案 11 :(得分:0)

PHP的对象关系映射器(ORM),位于强大的数据库抽象层(DBAL)之上。它的一个关键特性是在一个名为Doctrine查询语言(DQL)的专有面向对象的SQL方言中编写数据库查询的选项,受Hibernates HQL的启发。这为开发人员提供了一种强大的SQL替代方法,可以保持灵活性,而不需要不必要的代码重复。

答案 12 :(得分:0)

如果你想要一个“动态”数据库模型化,表格自动适应你从代码推送的数据,请查看FoxORM的DataMapper方法或RedBean的ActiveRecord方法