colinmollenhour/mongodb-php-odm

此包已被 废弃 且不再维护。未建议替代包。
此包最新版本(1.0)的许可证信息不可用。

MongoDb PHP ODM 是一个简单的对象包装器,用于 Mongo PHP 驱动类,使在您的 PHP 应用程序中使用 Mongo 更像 ORM。它专为与 Kohana 3 一起使用而设计,但也同样容易与其他 PHP 应用程序集成。

1.0 2013-08-07 22:58 UTC

This package is auto-updated.

Last update: 2024-07-20 02:07:36 UTC


README

(没有更好的标题)

概览

MongoDb PHP ODM 是一个简单的对象包装器,用于 Mongo PHP 驱动类,使在您的 PHP 应用程序中使用 Mongo 更像 ORM,但 没有 缺点。它专为与 Kohana 3 一起使用而设计,但也容易与几乎无需额外努力的其他 PHP 应用程序集成。

设计原则

  • 不要过于复杂。 可以实现一些功能,但如果没有实现,那是因为它们会增加太多的复杂性,牺牲了优雅性和可用性。
  • 保持 Mongo 无模式。 我喜欢无模式。在模型定义中要求模式不是无模式。这个库让您保持无模式。
  • 遵循 Mongo 驱动约定。 在许多方面,使用这个库将非常类似于使用官方驱动程序。
  • 不要增加不必要的开销。 当然,它可能没有直接使用驱动程序那样快,但我非常确信您不会注意到区别。
  • 不要重复。 在使用这个库时,代码很少会重复。
  • 减少数据库请求/更新的次数。 防止冗余请求和对同一文档的多重更新。
  • 选择您喜欢的模式。 这个库现在支持直接使用 Mongo_Collection 作为便利包装器,或者选择两种类似 ActiveRecord 的模式,它们类似于 Table Data Gateway 模式Row Data Gateway 模式

基本思想

基本思想是将 Mongo PHP 库的使用简化为三个类

  • Mongo_Database
  • Mongo_Collection
  • Mongo_Document

Mongo_Database

此类封装了 Mongo 连接和 MongoDb 类的功能,因为大多数情况下应用程序仅与一个数据库交互。与多个数据库交互仍然可能,但它们不会共享单个连接。此类提供的功能

  • 配置用如“默认”之类的名称描述。Kohana 以典型的 Kohana 方式加载此配置,其他框架可以简单地将其指定为 Mongo_Database::instance('default',array(...)) 的参数以设置默认配置。
  • 数据库名称永远不会在您的代码中使用,除非在第一次提供配置时。轻松部署在不同数据库名称上的相同应用程序。
  • 与 Kohana 一起使用时,所有重要的数据库操作都可以轻松启用分析。分析输出类似于 Mongo shell 语法,以便在 shell 中轻松复制/粘贴进行调试。
  • 延迟数据库连接。

Mongo_Collection

此类实现了以下功能

  • 与Mongo_Document结合使用时,允许查询结果以模型迭代器的形式访问,而不是数组。
  • 将MongoCollection、MongoGridFS和MongoCursor的功能结合到一个基类中。
  • 通过聚合查询参数、游标选项、请求的字段等,允许构建查询。
  • 当与Kohana一起使用时,所有数据库请求都可以轻松地进行性能分析。
  • 通过使用__toString()方法获取表示完整查询的字符串,可以更容易地进行调试,再次模仿MongoDb shell的语法。

Mongo_Document

此类将数据库中的文档(或行)对象化。为每个数据模型扩展基类,通常每个集合一个,享受一些非常简单的CRUD操作和一些便利,例如

  • before_*after_*方法,您可以通过实现这些方法来添加透明功能,例如更新时间戳、验证等。
  • 为所有Mongo更新操作提供辅助函数,这些函数在下一个save()之前聚合。
  • 别名字段名称,您可以在数据库中使用短字段名称,在代码中使用长名称。随您喜好。
  • 自动加载引用的文档。例如:echo $post->user->email
  • 延迟加载文档和引用文档。例如,上述是两个请求,这将只有一个请求:echo $post->user->id

有关更多详细信息,请参阅维基百科。

更多信息

@版权所有 © 2013 Colin Mollenhour (http://colin.mollenhour.com) 此项目受“新BSD”许可证的许可(见LICENSE.txt)。

贡献者

  • @panrafal
  • @sergeyklay
  • @Xobb
  • @sebicas
  • @kanema
  • @semalead
  • @bbedwell
  • @kohenkatz