【问题标题】:How do I use multiple repositories for a single entity in Doctrine2?如何在 Doctrine2 中为单个实体使用多个存储库?
【发布时间】:2015-05-23 09:08:56
【问题描述】:

我正在考虑第一次在项目中使用 Doctrine2。在我的研究中,让我感到震惊的一件事是:

<?php
/**
 * @Entity(repositoryClass="BugRepository")
 * @Table(name="bugs")
 **/
class Bug
{
    //...
}

似乎我只能将一个存储库与每个实体关联?如果这个 Repository 类变得太大(方法/代码太多)并且我想将它分成多个 Repository 类,我该怎么办?

【问题讨论】:

  • 您可以将您的逻辑移动到一个或多个服务类中,然后注入存储库。存储库主要关注查询。大多数实际工作应该在其他地方完成。
  • 是的,但我有很多疑问
  • 所以你是说在 Doctrine2 中没有办法做到这一点?您唯一的建议是精简存储库,我们无能为力吗?我可能考虑过一些“工厂”,因为存储库可能会延迟加载其他存储库,但所有内容都来自要构建的单个存储库(分配的学说)。
  • 玩一下。我想你会找到几种方法。是的,存储库可以充当工厂来分离查询。或者您只需创建特定的查询类并将存储库注入其中。
  • 明白了@Cerad。如果您想通过将教义存储库注入查询类的示例给出答案,我将接受该答案。但除此之外,感谢您的指导!

标签: doctrine-orm repository entity


【解决方案1】:

对于您的具体情况,存储库即服务

<?php

/**
 * @Entity
 * @Table(name="bugs")
 **/
class Bug
{
    //...
}

然后创建第一个存储库:

<?php

use Doctrine\ORM\EntityManager;
use Doctrine\ORM\EntityRepository;

final class FirstBugRepository
{
    /**
     * @var EntityRepository
     */
    private $repository;

    public function __construct(EntityManager $entityManager)
    {
        $this->repository = $entityManager->getRepository(Bug::class);
    }

    // ... some methods
}

还有下一个:

<?php

use Doctrine\ORM\EntityManager;
use Doctrine\ORM\EntityRepository;

final class SecondBugRepository
{
    /**
     * @var EntityRepository
     */
    private $repository;

    public function __construct(EntityManager $entityManager)
    {
        $this->repository = $entityManager->getRepository(Bug::class);
    }

    // ... other methods
}

您想了解更多和完整的示例吗?检查帖子How to use Repository with Doctrine as Service in Symfony

【讨论】:

    猜你喜欢
    • 2012-07-08
    • 1970-01-01
    • 2012-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-24
    • 1970-01-01
    相关资源
    最近更新 更多