从Doctrine EntityRepository中使用魔法查找方法是好的吗?


Is it good to use magic find methods from Doctrine EntityRepository?

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

我想知道如果这是一个很好的做法,使用魔法查找方法(如查找($id), findByField($value)等…)。

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

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

我对这种重载的魔法查找方法也有不好的感觉,因为它有点像把我自己的repo实现和父实体库的实现混合在一起。

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

现在,谁能告诉我最好的做法是什么,为什么?

编辑

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

我也读了关于魔法发现者的教义文档,发现:http://docs.doctrine-project.org/projects/doctrine1/en/latest/en/manual/dql-doctrine-query-language.html magic-finders

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

所以我终于得出了我自己对魔法查找器的看法(和用例)。使用它们只是为了加快编码速度,并且总是用TODO标记它们,以便在清理代码时将它们重写为自定义存储库方法。

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