PHP:为未来的扩展和变化选择ORM?

Posted

技术标签:

【中文标题】PHP:为未来的扩展和变化选择ORM?【英文标题】:PHP: Choosing ORM for future expansion and changes? 【发布时间】:2010-08-20 11:18:30 【问题描述】:

我来自 Codeigniter MVC 背景,我们已经使用了一段时间。是时候为一个大项目推出我们自己的框架了,但是我们现在来到了数据库部分,马上就有点困惑了。 在 Codeigniter 中,我们将 ActiveRecord 用于所有 SQL 数据库连接,效果很好,但由于它不是一个单独的部分,我们正在寻找一种 ORM 解决方案,以便在我们的模型中编写尽可能少的代码来获得我们的数据库中的数据。

我们已经审查了包括 Doctrine2 和 Propel 在内的主要替代方案,但我们对这些配置文件的事实以及这些库的实际范围感到非常害怕。

从维护的角度来看,选择一个需要在更多文件中编辑的 ORM 是否真的很有意义,而不是在推出架构更改时明显的 MVC?

【问题讨论】:

IMO,当你的替代方案是滚动你自己的 ORM 时,你最好每隔一段时间编辑几个配置文件。 嗨!我绝对不会为了维护自我而建立自己的 ORM,这就像重新发明一个已经做过五十次的***:) 【参考方案1】:

说实话,propel 和教义可能是目前市场上最好的 php ORM,我使用与 symfony 框架捆绑在一起的 propel,但是一旦你了解了文档,它确实会产生巨大的差异,并且两个 ORM 都知道如何当您需要本机 sql 时,不要打扰您。我建议您从两者中选择一个(推进/学说),然后花时间阅读文档,最终结果将是值得的。

【讨论】:

【参考方案2】:

好吧,实际上对于 Propel,您在更改架构时不必编辑很多文件(如果您坚持使用基本的 ORM)。您只需更新您的数据库架构文件 (schema.xml),然后运行 ​​propel-gen,该工具将在您指定的文件夹中(在 build.properties 中)为您创建必要的 Propel 类。

永远不要编辑 om 文件夹中的 BaseXXX 类,因为每次更改架构并运行 propel-gen 时,它们都会被覆盖。只需将您的业务逻辑添加到主文件夹中的类(默认情况下继承基类),它们只创建一次,之后不会被 propel-gen 触及。

【讨论】:

【参考方案3】:

而使用学说,您基本上可以只依赖 schema.yml 文件(YAML 格式)。使用该文件,doctrine 能够生成 SQL、模型类、过滤器……一切(当然,您可以根据需要修改文件,但在大多数情况下您不会)

【讨论】:

以上是关于PHP:为未来的扩展和变化选择ORM?的主要内容,如果未能解决你的问题,请参考以下文章

绕过 ORM 类已经扩展了 DB 类并且您需要它从抽象类扩展的事实

一些使用 PDO 的 ORM?

Doctrine 2.2 ORM:查找扩展实体

构建自己的PHP框架--定义ORM的接口

共享多租户 MySQL 数据库的可扩展性

Zend Framework ORM 样式表数据网关与扩展 Zend_Db_Table_Abstract