为啥使用 Doctrine 而不是 CakePHP 的标准数据库 ORM?
Posted
技术标签:
【中文标题】为啥使用 Doctrine 而不是 CakePHP 的标准数据库 ORM?【英文标题】:Why use Doctrine instead of CakePHP's standard database ORM?为什么使用 Doctrine 而不是 CakePHP 的标准数据库 ORM? 【发布时间】:2012-09-19 20:44:06 【问题描述】:我即将开始使用 Cakephp 2.2 开发一个新的 Web 项目,之前主要使用 Zend Framework 1。
乍一看,我真的很喜欢 CakePHP 处理模型和底层数据库表的方式,尤其是在快速设置一对多和多对多关系方面,并且尽量减少麻烦。坦率地说,与我以前在 Zend Framework 中做事的方式相比,这似乎是一股新鲜空气。
然而,在过去几年中,在使用 Zend Framework 时,我曾研究过使用 Doctrine 来提供 ZF 相当笨拙的模型关系。 Doctrine 在我看来非常强大和灵活。
所以现在我想知道,在我深入研究我的新 CakePHP 项目之前,我是否还应该考虑将 Doctrine 与我新选择的框架一起使用?与 CakePHP 的内置 ORM 和数据库功能相比,Doctrine 带来了哪些优势和劣势(不是双关语!)?
【问题讨论】:
【参考方案1】:CakePHP 作为一个整体使用效果最好。在您的特定情况下,尽管您可以根据需要使用 Doctrine 代替 Cake 的 ORM,但您会失去很多 cake 的功能。例如。 FormHelper 会“神奇地”做很多事情,比如使用模型的模式猜测字段的正确输入类型等,在验证失败时自动在表单中的适当字段下方显示错误消息等。
正如您评论的那样,您对 Doctrine 也没有太多经验,因此我建议您坚持使用 CakePHP 的 ORM,并且仅在您发现它不足以满足您的需求时才寻找选项。
【讨论】:
我现在几乎已经完成了将一个旧项目从 ZF1 移植到 CakePHP 的工作(因为我不喜欢 ZF2 的发展方向),我认为你的回答几乎总结了我使用 CakePHP 的经验,所以远的。我喜欢它在设计上相对简单,并且可以看出在这个阶段使用 Doctrine 会使很多 CakePHP 的“魔法”变得多余。我现在将坚持使用 CakePHP 的 ORM,并在未来的某个时候看看 Doctrine。 自从我最初回答这个问题以来,情况发生了很大变化。 CakePHP 3.x 中的 ORM 已被重写,与以前的版本相比有了巨大的改进。它甚至可以单独使用github.com/cakephp/orm 反过来也是可能的:在 CakePHP 中使用另一个 ORM 库,但我个人认为没有任何理由这样做。 CakePHP 3.x 的 ORM 真是太棒了。 我最近开始了一个基于 CakePHP 3.2 的新项目,我必须说,ORM 看起来确实不错!【参考方案2】:如果你已经使用过 Doctrine 和 CakePHP 的 ORM,你可以根据主要原因来决定改变:
什么可以提高您的工作效率? 什么会给您更多的可维护性? 什么可以减少您的学习曲线?就个人而言,我会选择 Doctrine,因为它确实针对一个问题。
【讨论】:
我实际上还没有用 Doctrine 做任何认真的工作,只用 CakePHP 的 ORM 做了少量工作,刚好够我起草项目的一些基本功能。就我个人而言,就我目前所使用的而言,我认为 CakePHP 可以回答您的所有三个问题,至少从我目前所见的情况来看是这样。但是,我不得不怀疑,我是否会发现 CakePHP 的 ORM 缺少 Doctrine 提供的某些功能。以上是关于为啥使用 Doctrine 而不是 CakePHP 的标准数据库 ORM?的主要内容,如果未能解决你的问题,请参考以下文章
Symfony4 / Doctrine,如何选择“不同”的对象? getResult() 返回字符串数组,而不是对象数组