如何选择 ORM

Posted

技术标签:

【中文标题】如何选择 ORM【英文标题】:How to choose an ORM 【发布时间】:2010-09-20 09:34:09 【问题描述】:

我开始学习的框架支持 2 个开箱即用的 ORM。对于这个问题,我认为说出哪两个 ORM 并不重要。我的问题比这更笼统。您通常如何决定使用哪个 ORM?我以前没有使用过 ORM,但我猜有一个任何像样的 ORM 都必须具备的必备列表,然后还有一个不错的列表等等。

【问题讨论】:

如果说“which 2 ORMs”不重要,为什么要在这个问题的标签中加上“symfony”和“doctrine”? :D 【参考方案1】:

ORM 就像任何其他软件包一样。您需要比较多个事物,而不仅仅是可以和不能。让我们想想:

功能 文档 开发进度 速度 代码怎么样 社区 支持

您的优先事项可能与我的不同。您是否需要面向未来且生产稳定的产品?或者你想要更前沿的东西?

【讨论】:

尖端技术:最新技术。最好的 ORM 会做你想做的一切。如果你找到这样的 ORM,那就去吧。如果你不这样做,你将不得不做出选择。要做出正确的选择,您必须自问自己的需求是什么。 最前沿可以是:完全使用 php 5.3、最新的 oop 设计范式(它给你什么样的继承)、标准、与框架的集成。 Doctrine2 实施了一些尖端技术。【参考方案2】:

第一个问题应该是您的应用程序是否需要 ORM,而不是 ORM 提供了哪些功能。如果您的应用需要 ORM,请选择适合您应用的 ORM,而不是功能最丰富的。如果您不相信 ActiveRecord,则不要选择基于该模式的 ORM,而不管功能如何。

有关对象关系模式的概述,请查看 Fowler 的 PoEAA:

http://martinfowler.com/eaaCatalog/index.html

一个实现大多数对象关系模式的 ORM 暂时可以被认为是不错的,但就像我说的,如果你不需要它,你就不需要它。

【讨论】:

所以一个 ORM 实际上可以容纳多个数据库设计模式(ActiveRecord 和其他)? @jblue 从理论上讲,是的。在实践中,AR 是主要模式 (though it sucks for ORM)。 您似乎在这方面知识渊博,所以我想问您一个相关问题。我在这里询问了如何使用带有 MVC 的服务层:http://***.com/questions/3744402/is-mvc-service-layer-common-in-zend-or-php我的问题是:某些数据库设计模式是否更适合模型之上的服务层? @jblue 如果知道在哪里寻找某些模式是博学的,那么我是博学的。但我真的只是一个代码编码员。 :) Bill Karwin 已经给了你问题的最佳答案。我不认为有任何特定的数据库设计模式特别适合服务层。

以上是关于如何选择 ORM的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Doctrine ORM 中使用 createQueryBuilder 选择特定列?

如何在fuelPHP Orm模型中选择MAX或COUNT

如何在我的 Eloquent ORM laravel 选择中包含一个过程?

如何使用 django ORM 在 postgres 中仅选择日期部分

如何使用 Kohana ORM 选择以及在哪里 - 如果 - 在?

Peewee ORM中如何选择和限制related_name连接?