如何在Doctrine2中为单个实体使用多个存储库?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Doctrine2中为单个实体使用多个存储库?相关的知识,希望对你有一定的参考价值。

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

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

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

答案

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

<?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

以上是关于如何在Doctrine2中为单个实体使用多个存储库?的主要内容,如果未能解决你的问题,请参考以下文章

使用jpa存储库查询多个表

如何使用单个实体或单个存储库设计两个不同的项目?

Doctrine2 刷新单个删除的实体

Doctrine2 “Like” SQL 查询和“Class true 不存在”错误

如何创建基于多个唯一键的转换后的 Doctrine 2 实体

如何在存储库模式中为同一接口使用两个数据存储?