As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center获取指导。




7年前关闭。





我有CodeIgniter和Cake PHP的现场项目经验。但是,现在我需要进行一个都不适合的大型项目。我几乎决定使用symfony 1.4(根据我的客户的要求,2.0不是一个选择)。

在Symfony 1.4中,我也对ORM选择感到困惑:教义还是Propel?我经历了几个环节。迄今为止最好的发现是
PHP ORMs: Doctrine vs. Propel

但是,所有这些比较似乎都至少存在两年之久,从那以后,世界肯定会发生很大变化。我的编码风格没有任何问题;我对所有Active Record,Criteria,DQL或其他内容都满意。对我而言,性能比最后的编码风格更为重要。我主要关注的是在处理大量数据时的性能,可能是集群数据库下多个表中的数百万行。不幸的是,目前我的经验不足以就此事做出独立决定。

谁能说明一下Symfony 1.4下Propel / Doctrine的性能吗?除了性能以外,在选择PHP ORM时还有其他值得注意的因素(编码风格除外)吗?

最佳答案

tl;博士:我使用Doctrine很久了,如果我必须重新开始,我会选择Propel。

这是一个常见的问题,几乎没有好的答案。但我只想告诉你我的观点。

自从第一个alpha版本开始(以及与旧的symfony 0.63版本一起),我就开始使用Doctrine。我们选择Doctrine而不是Propel,因为Doctrine支持PDO(PHP原生),而Propel仍在Creole上运行(非原生)。克里奥尔语与PDO相比非常慢(当然)。

最近,主义增加了迷失的魔力。我的意思是,您可以为所有内容调用getFieldfindOneByField,它将返回您想要的内容。无需构建自己的getter和setter,那真是太棒了。魔术在这个时候真的很新潮。

使用Doctrine编写查询非常容易,而不是冗长的Propel准则和标准。我是Doctrine的忠实粉丝,并建议所有人开始使用它而不是Propel。

然后,Propel从1.3开始切换到PDO,并开始有一个不错的API来编写查询,这几乎与Doctrine相同。主要区别在于,Propel产生所有神奇的事物,而Doctrine则在飞速发展。我认为那是最大的不同。

Propel在此代码中没有任何魔力。当您构建模型时,它会生成所有的getter / setter,join等。在运行查询时,Doctrine会做所有事情。这对于中小型项目是可以的,但是它开始变得更大,它将成为一个缓慢的解决方案。这对于调试也非常有用,因为您可以在生成的类中找到代码,而不必从一个类跳到另一个类来查找处理这种情况的全局方法。

两种ORM都使用行为。我喜欢行为。在《教义》和《 Propel》中对它们的处理方式不同。教义仍然使用其魔力来处理问题,而Propel则通过类内部的行为来生成一切(从生成的类中获得更多的点,而不是魔点)。

截至目前,由于Doctrine 2(对于sf 1.4而言根本不是本地的),Doctrine 2中的任何内容(从您提到的线程中脱颖而出)都没有真正改变,因为1.2.x分支几乎已死(last release are 24/08/2010 )。正如您在github上看到的那样,Propel仍然很活跃,非常活跃。

我仍在使用Doctrine,但几年来我从Propel学到了很多东西。我已经在教义上建立了一些个人项目。从今天起,我改变了主意,如果必须启动一个新项目,我将使用Propel进行。

几个链接:


Should I choose Doctrine 2 or Propel 1.5/1.6, and why?(在developers.se上)
The POV from the Propel lead dev关于此选择(当然赞成Propel)

关于symfony1 - 推进或 Doctrine ;对于Symfony 1.4来说,这是更好的ORM ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12140194/

10-12 02:37