PHP的ORM:学说与行走PHP的ORM:学说与行走(PHP ORMs: Doctrine vs.

2019-05-13 02:40发布

我开始一个新项目的symfony其可快速与整合主义和行走 ,但我当然需要做出选择....我想知道是否有经验的人在那里有一般的优点和/或缺点与去这两个要么?

非常感谢。

编辑:感谢您的所有响应,有用的东西。 有没有真正正确回答这个问题,所以我就标记为批准,进行了最流行的向上票之一。

Answer 1:

我会跟去学说。 在我看来,这是一个更活跃的项目,并正在为symfony1.2默认ORM这是更好的支持(尽管正式奥姆斯被视为相等)。

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

<?php
// Propel
$c = new Criteria();
$c->add(ExamplePeer::ID, 20);
$items = ExamplePeer::doSelectJoinFoobar($c);

// Doctrine
$items = Doctrine_Query::create()
       ->from('Example e')
       ->leftJoin('e.Foobar')
       ->where('e.id = ?', 20)
       ->execute();
?>

(主义的实现更加直观的给我)。

另外,我真的喜欢你管理主义关系的方式。

我觉得从学说文档此页是值得一读: http://www.doctrine-project.org/documentation/manual/1_2/en/introduction:doctrine-explained

综上所述:如果我开始一个新项目或有学习学说,推动我会去学说任何一天之间进行选择。



Answer 2:

我有偏见,因为我帮一点上行走的下一个版本,但你必须考虑到行走确实是第一个ORM可用,那么滞后有点学说得到了创建的时候,但现在又有积极发展。 Symfony的1.3 / 1.4自带的Propel 1.4,其中最比较停在波轮1.3。 另外,行走(1.5)的下一个版本将包含大量的改进,特别是在创建你的标准(导致更少的代码为你写)。

我喜欢行走,因为它似乎比主义不太复杂:大多数代码是在几个生成的类,而在学说很多班级已经分手了的功能。 我喜欢我使用(不太多“魔力”)的图书馆有很好的理解,但当然,我有行走更多的经验,所以也许主义不是那么复杂的幕后。 有人说,行走速度更快,但你应该检查自己这一点,并考虑是否这胜过其他方面的差异。

也许你还应该考虑Symfony的插件,为不同架构的可用性。 我相信,行走有一个好处在这里,但我不知道有多少所列出的插件是否仍是最新与Symfony的最新版本。



Answer 3:

它归结为个人喜好。 我使用的Propel,因为(除其他事项外)我喜欢一切有它自己的具体的getter和setter方法的事实。 在教义,这种情况并非如此。

推进:

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

教义:

$person->name = 'Derek';
echo $person->name;

我喜欢有吸气和setter方法的原因是,我可以把所有类型的逻辑在其中,如果我需要。 但是,这只是我的个人偏好。

我还要补充一点,虽然行走在过去的缓慢移动,它现在正在积极开发一次。 它已经发布了几个新版本,在过去数个月。 最近的Propel的版本包括一个“流利查询界面”类似主义的 ,所以你不必使用标准了,如果你不想。



Answer 4:

应当指出的学说2是目前正在开发中 [编者按]和功能几乎是从学说1当前稳定版本,它依靠数据映射模式,而不是活动记录,并使用“实体管理器”来处理持久性完全不同逻辑。 当发布了它所能承受更为相似Java的休眠(1学说更像是Rails的ActiveRecord)。

我一直在使用Doctrine 2的alpha版本开发,而且必须说,这是原则1以上的头和肩膀(只是我的意见,我从来没有用过波轮)。 有很好的机会时,它的发布主义社会将朝着它移动。

我会鼓励你检查出主义,但如果你喜欢的行走和学说现在使用的活动记录风格,你可能想只是波轮坚持。



Answer 5:

两个引用有点过时了,所以你还是涉及到一些泛泛而谈,基本上你不得不评估与框架,这样你的经验,教导一个主要缺点是不能有一个IDE,可以让你自动代码在推进是一个胜利者,学习曲线推进和学说有很大的不同,它更容易推动,如果你的项目需要管理复杂的数据模型使用学说,如果你想与最好记录的ORM迅速开展工作,并找到在波轮更多支持互联网使用,更加成熟,我相信大多数使用。

http://propel.posterous.com/propel-141-is-out



Answer 6:

我建议使用1.6推进这对IDE的自动完成功能更好。



Answer 7:

我不是PHP 5个非ORM框架的用户,但这里的一些比较不错的职位(如果你还没有见到它们):

http://codeutopia.net/blog/2009/05/16/doctrine-vs-propel-2009-update/

http://trac.symfony-project.org/wiki/ComparingPropelAndDoctrine

朝学说两种conlusion喜欢作为一个Symfony的新一代ORM的。



Answer 8:

同时使用两者的对数年后,我喜欢行走2〜学说只是根据你如何构建你的查询逻辑。 原则是在深度,因为它可以获取和管理它的许多方面匹配深度的那个级别。 推进我觉得有构建和管理查询互动更加流畅和对象驱动方式。

对我来说,这导致了在模型中更少的代码,并围绕如何逻辑可以/将处理更多的结构。 这导致刚刚建立了许多互动的常见功能。 (你会与数据库做什么都90%后只是将是某种程度的CRUD操作。)

最后,两者都是强大的,可管理,将完成这项工作。 我个人的项目和兴趣使用的Propel ORM 2和未来的项目,如果仍然用PHP编写的会走这条路。

我一直在使用这两个每天在过去的3 - 4年。



Answer 9:

我建议使用DbFinder插件 。 这实际上是支持一个非常强大的插件,而且是相当不错的强大。 其实我喜欢用它比任何更好。



Answer 10:

如果我没看错,这两个奥姆斯使用基于XML的架构,以及创建这些模式定义是相当繁琐的。 如果你需要用流利的风格基于PHP的简单模式。 您可以尝试LazyRecord https://github.com/c9s/LazyRecord它支持自动迁移和升级/降级脚本生成。 和所有的类文件都没有运行成本静态生成。



文章来源: PHP ORMs: Doctrine vs. Propel