gpt4 book ai didi

php - 使用 Doctrine EntityRepository 中的魔术查找方法好吗?

转载 作者:可可西里 更新时间:2023-10-31 23:46:56 24 4
gpt4 key购买 nike

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

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

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

作为一种解决方案,我通常在自定义存储库类中编写 getter。在 symfony 文档中有这样的 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

These are very limited magic finders and it is always recommended to expand your queries to be manually written DQL queries. These methods are meant for only quickly accessing single records, no relationships, and are good for prototyping code quickly.

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

最佳答案

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

关于php - 使用 Doctrine EntityRepository 中的魔术查找方法好吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31853197/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com