我有大约 10 个实体:\App\Entity\User,\App\Entity\Group, ...
对于它们中的每一个都有自己的存储库:\App\Repository\UserRepository,...在十几种方法中的每一种中。
访问方法在 Doctrine 中:
$userRepository = $em->getRepository('App\Entity\User');
但是,这并不方便,因为丢失了代码补全。
问题:如何在不增加静态连接代码的情况下组织与存储库的工作? 我应该使用静态方法 get 吗?
class UserRepository extends EntityRepository
{
/**
* @static
* @return \App\Repository\UserRepository
*/
public static function get ()
{
$em = \Registry::getInstance()->get('em');
return $em->getRepository('App\Entity\User');
}
}
我看到实现了与交响乐的 Doctrine 一起工作,但代码完成也存在同样的问题。
最佳答案
我认为对此没有任何完全干净的解决方案。
您的选择基本上归结为两个:
- 展示时的静态 setter/getter 。 问题:难以进行单元测试,隐藏了对 Registry 类之类的依赖项,需要手动添加它们
- 使用某种带有 setter/getter 的工厂。 问题:需要手动添加工厂方法
我真的不认为这有什么大不了的。无论如何,存储库通常没有那么多方法,所以不难记住(或检查)
但是,您还可以尝试的一件事是:
/* @var My\Repository\FooRepository */
$repo = $em->getRepository('My\Repository\FooRepository');
这应该会在大多数 IDE 中激活 $repo
的完成。它仍然需要一些额外的输入。
关于php - 使用 Doctrine ORM : Custom repository,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7144932/