PHP ORM:学说与推进

2022-08-30 07:09:00

我正在用symfony开始一个新项目,它很容易与教义推进相结合,但我当然需要做出选择。我想知道更有经验的人是否对这两者中的任何一个有一般的利弊?

多谢。

编辑:谢谢你的所有回应,有用的东西。这个问题没有真正正确的答案,所以我只会将获得最受欢迎的赞成票的人标记为已批准。


答案 1

我会选择教义。在我看来,这是一个更活跃的项目,并且作为symfony的默认ORM,它得到了更好的支持(即使官方认为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

总而言之:如果我要开始一个新项目,或者不得不在学习教义和推进之间做出选择,我总有一天会选择教义。


答案 2

我有偏见,因为我对Propel的下一个版本有一点帮助,但你必须考虑到Propel确实是第一个可用的ORM,然后在Therism创建时有点滞后,但现在又有了积极的开发。Symfony 1.3/1.4 附带 Propel 1.4,大多数比较都停留在 Propel 1.3。此外,Propel (1.5) 的下一个版本将包含许多改进,尤其是在创建您的标准方面(导致您编写的代码更少)。

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

也许你还应该考虑不同框架的Symfony插件的可用性。我相信Propel在这里有优势,但我不知道列出的插件中有多少仍然与最新版本的Symfony保持同步。


推荐