2011-11-02 70 views
12

我开始使用Symfony2创建一个新项目,我不确定要选择哪个ORM。我听说过关于Doctrine2的一些不好的事情,特别是在继承和DQL方面。看起来Propel从死亡中恢复过来,但另一方面,没有保证它会永远持续下去。哪个ORM与Symfony2一起使用?

你有什么建议吗?

+1

我记得在学习s1的时候,我看到了在tuts中列出的一些替代品,并采用了一对夫妇。我对此感到遗憾,如果社区使用例如B/C学说,所有的博客范例和SO评论都将围绕着学说。所以,即使Propel更适合(我不知道),但D仍然是一个更好的选择。 – yitznewton

回答

11

我可以告诉你Propel是Symfony2最合适的ORM。它工作正常,没有计划停止它的活动。 Propel2项目将比Propel 1.6.x更好(这真的很棒)。

不要犹豫使用Propel,包括Sensio Labs在内的许多用户都在使用它!

下面是Symfony2中的波轮文档:http://www.propelorm.org/documentation/#working_with_symfony2

注意:没有对堆栈交易所相关主题:https://softwareengineering.stackexchange.com/questions/48760/should-i-choose-doctrine-2-or-propel-1-5-1-6-and-why/117078#117078

几点我忘了:

  • 行为是行走的一部分,没有人在Doctrine2中提供。这意味着Propel正式支持它们并提供支持/改进。不清楚教义的。
  • 推进速度非常快。我同意Doctrine2比推进质量插入更好。
  • 推进是10岁,稳定和许多人使用。
  • 还没有另一种语言与Propel学习。
  • 由于流畅的API,Propel2确实是面向对象的。
  • Doctrine2 ORM与ODM不共享相同的API,因此您可以使用Propel和D2 ODM(如D2 ORM和ODM),这里没有优点。
  • Propel使用特定平台的代码生成功能,因此它针对您的需求进行了优化,并且由于运行时间的原因而快速生成&生成器部件。

几点我喜欢Doctrine2:

  • 注解。
  • 整个代码,因为它是相当新的。

问题不是关于Doctrine DBAL,而是更多关于Doctrine ORM的问题。 Propel2正在改进整个Propel 1.6.x代码。

哦,我用Doctrine2很长一段时间;)

+0

http://programmers.stackexchange.com问题是关于选择与框架没有任何关系的ORM。据我所知,就选择ORM作为一个独立的工具。 –

+1

由于Symfony2是不可知的,所以它非常相关。正如我所说,几乎官方的捆绑包也是不可知论的,使用Doctrine ORM,ODM,Propel,Mandango等不是问题。 –

+22

您可能应该在您的帖子中透露您与Propel的关系。 – Problematic

1

我可以告诉你行走是最适合的ORM与Symfony2的 使用我应该不同意。 Doctrine2是Symfony的ORM 原生。它包含在这里提供标准的Symfony分布:http://symfony.com/download

Symfony的文档描述了使用原则的工作主要是,不推进。所以,我不认为推进选择太明显了。我想你应该真的重视后果。我更喜欢教义。

这里是一个选项列表,通过波轮软件包支持:http://www.propelorm.org/cookbook/symfony2/working-with-symfony2.html

+0

没有什么是原生的,Doctrine将从Symfony2核心(2.1版本)中删除,只需阅读最后的Fabien Potencier博客文章。 –

+0

@William DURAND您指的是哪个博客?无论如何,如果这是真的,现在(2.x分支)原则肯定是原生的。官方文件是关于教义的,而不是任何其他的ORM。另外,Doctrine的作者Jonathan H. Wage在Sensio实验室工作了一段时间。 –

+2

这一个:http://fabien.potencier.org/article/49/what-is-symfony2 该文档不是关于教义,除了一个章节也为Propel记录。伟大的捆绑包是不可知论的,并且像Propel一样和魅力一起工作。 我知道乔纳森为SL工作,如果他们雇用我,你会改变主意吗?我不这么认为;) 我不是说Doctrine2不适合Symfony2,但在现实生活中使用它是一种痛苦。基本的用法是可以的,但如果你想做更多的东西,这是非常困难的。 –

4

我个人的选择是有几个原因学说2:

  • 概念上来说,这是很容易理解的。使用实体和实体管理器很简单。我喜欢实体不需要扩展任何基础模型类(比如在Doctrine 1中)。

  • 这是排序现在是Symfony2的标准ORM。尽管Symfony2可能不会正式“认可”它,但这是大多数人使用的,因此网上有大量的信息。这个价值是巨大的。

你提到你已经听说过“关于Doctrine2的坏事” - 重要的是你意识到没有ORM会是完美的。我遇到了一些问题,但只要您有创意地思考,就可以找到解决方案。有时候这种解决方案意味着写入原始SQL,而不管ORM纯粹主义者会说什么。我没有遇到任何我后悔使用Doctrine 2的情况。

我花了很多时间看着Propel,但我只是不喜欢它的工作原理。这并不是说这是一个程序设计不佳的图书馆,但对我个人而言,这并不适合。但是由于每个开发人员都不同,我可以提供的最佳建议是查看这两个库的文档和使用示例。既然你会成为使用它的人,而不是我们,你需要选择你认为你会从中受益最多的图书馆。

+0

那么..不知道你在哪里看到DataMapper DP比ActiveRecord方法更容易。我同意实体简单但限制性太强。 问题是,当你想要构建真实的东西时,你必须了解D2背后的复杂性以及它如何工作,这并不容易。即使你想构建复杂的东西,ActiveRecord也非常简单。 –

+0

我对Doctrine 1中的ActiveRecord很熟悉。我同意它的使用很简单,但有很多情况下它不如数据映射器模式那么高效。 –

+0

给我一个DataMapper更有效的用例吗? 您是否尝试过嵌套树/集? –

相关问题