Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP ORMs:条令vs.推进_Php_Orm_Symfony1_Doctrine_Propel - Fatal编程技术网

PHP ORMs:条令vs.推进

PHP ORMs:条令vs.推进,php,orm,symfony1,doctrine,propel,Php,Orm,Symfony1,Doctrine,Propel,我正在启动一个新项目,该项目很容易与和集成,但我当然需要做出选择。。。。我想知道那些更有经验的人对这两种选择中的任何一种是否有一般的利弊 非常感谢 编辑: 感谢所有的回复,有用的东西。这个问题没有真正正确的答案,所以我只会将获得最多支持票的那一个标记为已批准。我不是PHP5非框架ORM的用户,但这里有一些比较好的帖子(如果您还没有看到): 这两个结论都倾向于将信条作为Symfony的新一代ORM。这两个参考文献有些过时,因此您仍然涵盖了一些概括性内容,基本上您必须评估您对该框架的经验,doc

我正在启动一个新项目,该项目很容易与和集成,但我当然需要做出选择。。。。我想知道那些更有经验的人对这两种选择中的任何一种是否有一般的利弊

非常感谢

编辑:
感谢所有的回复,有用的东西。这个问题没有真正正确的答案,所以我只会将获得最多支持票的那一个标记为已批准。

我不是PHP5非框架ORM的用户,但这里有一些比较好的帖子(如果您还没有看到):


这两个结论都倾向于将信条作为Symfony的新一代ORM。

这两个参考文献有些过时,因此您仍然涵盖了一些概括性内容,基本上您必须评估您对该框架的经验,doctrine的一个主要缺点是无法拥有一个IDE,使您能够自动编码,因为propel是赢家,学习曲线propel和doctrine非常不同,如果您的项目需要管理复杂的数据模型使用doctrine,如果你想快速使用ORM,这是最好的记录,并找到更多的支持,推动互联网的使用,是更成熟的,我相信大多数使用


我会支持教义。在我看来,这是一个更加活跃的项目,作为symfony的默认ORM,它得到了更好的支持(尽管官方认为ORMs是平等的)

此外,我更喜欢处理查询的方式(DQL而不是标准):


(理论的实施对我来说更加直观)

另外,我真的更喜欢你在教义中处理关系的方式

我认为条令文件中的这一页值得一读:


总结:如果我开始一个新的项目,或者在学习主义和推动力之间做出选择,我会在任何一天去学习。

< P>我是有偏见的,因为我在下一个版本的推进上有点帮助,但是你必须考虑到推动力确实是第一个可用的ORM,当教义被创建时,它就落后了一点。但现在又有了积极的发展。Symfony 1.3/1.4配备了推进1.4,其中大多数比较在推进1.3处停止。此外,下一个版本的spreep(1.5)将包含很多改进,特别是在创建标准方面(导致编写的代码更少)

我喜欢Propel,因为它似乎没有Doctrine复杂:大多数代码都在生成的少数类中,而Doctrine将功能划分为许多类。我喜欢对我正在使用的库有很好的理解(不是太多的“魔法”),但当然,我在推进方面有更多的经验,所以可能理论在幕后并不那么复杂。有人说推进速度更快,但你应该自己检查一下,并考虑这是否超过了其他差异。


也许你也应该考虑不同框架的SyfOnPuffic的可用性。我相信Propel在这方面有优势,但我不知道有多少列出的插件仍然是最新版本的Symfony。

这取决于个人喜好。 我使用spreep是因为(除其他外)我喜欢这样一个事实,即每件事都有自己的具体getter和setter方法。在理论上,情况并非如此

推进:

$person->setName('Derek');
echo $person->getName();
原则:

$person->name = 'Derek';
echo $person->name;
我喜欢使用getter和setter的原因是,如果需要的话,我可以在其中加入各种逻辑。但那只是我个人的喜好

我还要补充一点,尽管推进在过去进展缓慢,但现在又在积极发展。它在过去几个月里发布了几个新版本。最新版本的Prope包含了一个类似于Doctrine的“流畅的查询界面”,因此如果您不想再使用标准,就不必再使用标准。

应该注意的是,它目前正在开发[ed],其功能几乎与Doctrine 1的当前稳定版本完全不同。它依赖于数据映射器模式而不是活动记录,并使用“实体管理器”来处理持久性逻辑。发布后,它将更像Java的Hibernate(原则1更像Rails的ActiveRecord)

我一直在开发《条令2》的阿尔法版本,必须说它比《条令1》高得多(只是我的观点,我从未使用过推进)。当它被发布时,信条社区很有可能会向它靠拢


我鼓励您查看Doctrine,但如果您喜欢现在使用的Propel和Doctrine的活动记录样式,您可能只想坚持使用Propel。

我建议使用。这实际上是一个非常强大的插件,支持这两种功能,并且是一个非常强大的插件。实际上,我更喜欢使用它。

我建议使用propel 1.6,它更适合IDE的自动完成功能。

如果我没有错的话,两种ORM都使用基于XML的模式,创建这些模式定义非常麻烦。如果您需要一个具有流畅风格的基于PHP的简单模式。您可以尝试LazyRecord,它支持自动迁移和升级/降级脚本生成器。所有的类文件都是静态生成的,没有运行时成本。

在使用这两个类文件很多年后,我更喜欢Propel 2,而不是简单地根据您构建查询逻辑的方式。信条是尽可能深入的,并且管理它的许多方面与深度级别相匹配。我觉得Propel有一种更加流畅和对象驱动的方式来构建和管理查询交互

对我来说,这导致模型中的代码减少,而围绕如何处理逻辑的结构增加。这就导致了将许多交互构建为公共功能。(毕竟,90%的数据库操作只是某种程度的crud操作。)

最终,两者都是强大的、可管理的和可管理的
$person->name = 'Derek';
echo $person->name;