使用Doctrine EntityRepository中的魔术查找方法是否合适?

时间:2015-08-06 10:20:59

标签: php symfony doctrine-orm coding-style

我在symfony框架的背景下询问。

我想知道使用魔术查找方法(例如find($ id),findByField($ value)等)是否是一个好习惯。)。

这些方法既没有返回类型也没有定义。这导致我的IDE在它们周围标记警告。此外,我必须在使用这些方法的同时标记返回值的类型,以使代码完成处理这些变量。

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

我对这种重载魔术查找方法也有不好的感觉,因为它将我自己的repo实现与父EntityRepository混合。

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

现在,有人可以告诉我最佳做法是什么?为什么?

修改

最近我一直在寻找一些优化学说的方法,我发现建议不要使用魔法探测器,所以它是另一个反对魔术探测器的论据。

我还阅读了关于魔术探测器的学说文档,并发现: http://docs.doctrine-project.org/projects/doctrine1/en/latest/en/manual/dql-doctrine-query-language.html#magic-finders

  

这些是非常有限的魔术搜索器,始终建议将查询扩展为手动编写的DQL查询。这些方法仅用于快速访问单个记录,没有关系,并且可以快速地对代码进行原型设计。

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

1 个答案:

答案 0 :(得分:0)

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