ORM是全有还是全无?

时间:2010-09-22 01:58:59

标签: php zend-framework orm symfony1

如果我使用ORM,请与Zend或Symfony说。这是一个全有或全无的交易?

我想使用ORM,但也希望在某些情况下优化性能并自己编写查询以获得细节。因此,如果我开始使用ORM,一旦将其包含在我的项目中,是否难以以旧方式完成?

3 个答案:

答案 0 :(得分:9)

大多数ORM都会让您运行即席查询。

答案 1 :(得分:6)

使用Doctrine很容易“突破”ORM。 Doctrine允许您以4种不同的方式编写查询:

  • DQL。 Doctrine自己的查询语言,带有Doctrine的所有好处。
  • “raw”DQL(Doctrine2中的“本机查询”)。这与DQL类似,但允许在命令(例如,数据库特定功能)方面具有更大的灵活性。在此模式下,您必须更多地指定组件之间的相互关系。
  • SQL,使用PHP的PDO。您可以使用Doctrine_Connection获取一个PDO实例,该实例允许您编写查询,但仍具有PDO授予的额外安全性和易用性。
  • 原始SQL。虽然我不确定你为什么要这样做,但我认为Doctrine提供了这个,如果没有,你可以完全打破Doctrine。

如果您在Symfony中使用Doctrine,那么Symfony绝对没有任何功能可以阻止您使用Doctrine,即使它已启用。

最后一个警告:如果您使用的是Doctrine的一些高级功能(例如事件或行为),那么当您在DQL之外进行查询时,这些功能将很难配合使用。

答案 2 :(得分:0)

你可以混合和匹配你喜欢的一切。主要风险是在您的工具之间引入不兼容的不一致。 假设的例外:

如果我有一个名为User的doctrine2 ORM实体,并且我使用Zend_Db_Table来更改users表上的刷新之间的某些值,我可能会有一些无意的副作用或不良行为。