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相比非常慢(当然)。
最近,主义增加了迷失的魔力。我的意思是,您可以为所有内容调用getField
,findOneByField
,它将返回您想要的内容。无需构建自己的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/