17

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

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

4

13 回答 13

11

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

它具有您所期望的基本 ORM 内容以及我发现非常棒的全功能查询构建器。

它带有一整套命令行工具来管理您的数据库。例如,您可以在 YAML 中创建架构和固定装置,让 Doctrine 基于您的架构生成类,创建数据库,根据模型创建架构,然后使用您的固定装置填充数据库,所有这些都使用单个./doctrine build-all-reload.

它还包括对数据库迁移的支持,并且最近更新了迁移以自动区分和生成您的迁移模型。

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

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

就我个人而言,我非常迷恋 Doctrine,并且一有机会就对它赞不绝口。

于 2008-10-21T22:48:04.347 回答
9

我使用了一个鲜为人知的 orm 层,叫做 redbean。你可以在这里找到它:http ://www.redbeanphp.com 。从某种意义上说,它绝对是独一无二的,它只是自己创建表列和索引,根本没有任何配置文件。我发现它是一个巨大的节省时间!

于 2009-09-18T09:30:27.140 回答
6

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

于 2008-10-20T23:33:52.010 回答
5

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

我创建它时完全考虑了您提到的要点:没有几十个 xml 文件,没有庞大的框架,只是带有数据库到属性映射的简单构造函数,它可以完成基本的 CRUD / Find / Join 工作。对于我所做的大部分事情,我什至不需要编写自定义查询。

我之前也在我的网站上写过所有这些内容,请务必查看基本示例以了解它。

我将发布的下一个版本带有工作单线连接 on join on join(通过数据库走一条“路径”)、基于 ini 的数据库设置、跨数据库支持、超级简单的数据库抽象和一个标准的记录器如果您的数据库已关闭,请返回 SQLite。

如果您对更新感兴趣,请大声喊叫,我会尽快处理。

哦,是的,别忘了,还有一个不错的可视化脚手架生成器,叫做Pork.Generator。它会尝试分析您的数据库结构并找到 1:1 1:many 和 many:many 关系,并可以自动为您生成类 :-) (来源:schizofreend.nl在数据库中找到的关系

于 2008-10-20T23:35:37.840 回答
4

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

从技术上讲,这些类不实现 ActiveRecord 模式。相反,它们实现了表数据网关行数据网关模式。它们一起提供与 ActiveRecord 相似的价值,并且在某些方面比 ActiveRecord 更灵活。

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

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

于 2008-10-20T23:21:21.193 回答
1

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

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

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

于 2008-11-25T00:16:25.387 回答
1

遵循 Ruby DataMapper 实现的另一个选项是phpDataMapper。它显然是一个数据映射器而不是一个 ActiveRecord :)。

于 2009-08-20T21:31:39.670 回答
1

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

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

于 2010-01-15T10:45:42.370 回答
0

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

于 2011-02-02T05:10:26.080 回答
0

http://dbphp.net

优点

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

缺点

  • 它仅适用于对象。即您必须定义类并具有类实例以节省负载等。
  • 它没有站点,但有示例文件夹。
于 2013-10-19T21:02:45.120 回答
0

我喜欢Idiorm 和 Paris,并在小型项目中使用它们。Idiorm 是实际的 ORM,而 Paris 是活动记录实现。您可以使用您喜欢的任何一种。

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

于 2015-09-07T21:34:54.950 回答
0

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

于 2016-10-04T05:34:10.380 回答
0

如果您想要一个“动态”数据库建模,其中表自动适应您从代码推送的数据,请查看用于DataMapper方法的 FoxORM 或用于ActiveRecord 方法的 RedBean

于 2016-10-26T18:20:57.053 回答