php - 使用 Doctrine ORM : Custom repository

标签 php orm doctrine code-completion

我有大约 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/

相关文章:

php - Symfony 2 Form - 表单无效时刷新保护

php - 如何只在一个月内搜索sql中的日期

java - 使用 DiscriminatorFormula 迁移 Hibernate 数据库是不好的做法吗?

php - 使用数组的 Doctrine 查询生成器

php - 从 doctrine 中的表中检索所有行

php - 本地主机的 Instagram redirect-uri 失败

php - 无法在 PHP 中输​​出 Python Print

php - 何时在 Symfony2 的前端/核心方法中调用 ->flush()?

go - 在 beego orm 中插入带有 m2m 的模型

c# - "session per request"模式是否利用缓存? ("Session per session"或 "Session per request")