使用 Doctrine EntityRepository 中的 magic find 方法好吗?

Fis*_*her 6 php coding-style symfony doctrine-orm

我在 symfony 框架的上下文中询问。

我想知道这是否是使用神奇查找方法(如 find($id)、findByField($value) 等)的好习惯。

这些方法既没有返回类型,也根本没有定义。这导致我的 IDE 在它们周围标记警告。另外,我必须在使用这些方法时始终标记返回值的类型,以使代码完成对这些变量起作用。

作为解决方案,我通常在自定义存储库类中编写 getter。在 symfony 文档中有一个这样的 getter 的例子,它重载了 magic findBy 方法的变体。

我对这种重载的 magic find 方法也有不好的感觉,因为它有点将我自己的存储库实现与父 EntityRepository 实现混合在一起。

因此,我最终编写了使用“get”前缀而不是“find”的自定义 getter。

现在,有人可以告诉我最佳实践是什么以及为什么吗?

编辑

最近我正在寻找一些优化学说的方法,并且我发现建议不要使用魔法发现器,所以这是反对魔法发现器的另一个论点。

我还阅读了有关魔法查找器的教义文档,并发现: http://docs.doctrine-project.org/projects/doctrine1/en/latest/en/manual/dql-doctrine-query-language.html#magic-finders

这些是非常有限的魔法查找器,并且始终建议将您的查询扩展为手动编写的 DQL 查询。这些方法仅用于快速访问单个记录,没有关系,并且适合快速构建代码原型。

所以我终于对魔法发现者提出了自己的看法(和用例)。仅使用它们来加快编码速度,并始终用 TODO 标记它们,以便在清理代码时将它们重写为自定义存储库方法。

Ein*_*ius 1

在我看来,这也是一种不好的做法。我建议您使用 findBy([]) 和 findOneBy([]) 方法。我相信当我开始学习 symfony 时,我遇到过一种情况,魔法方法根本不起作用,因为我的实体的属性是使用下划线命名的。