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