symfony中的一个实体,两个存储库

时间:2015-10-20 07:52:17

标签: symfony

我想为1个实体使用2个存储库。

原因是:我有2个捆绑包,两个捆绑包都使用相同的实体。我希望将两种功能分开。 有时我需要特定的查询到捆绑包。

可以将1个存储库放入一个包中,将另一个存储库放在另一个存储库中吗? 也许这是一种错误的方式?

如果有人有想法。

谢谢!

2 个答案:

答案 0 :(得分:2)

2019更新

我要创建2个存储库。将所有方法添加到一个存储库是没有意义的,只是因为它们共享实体。我们最终可以通过这种方式为每个存储库提供30个方法。

第一个存储库

namespace App\Repository;

use App\Entity\Post;
use Doctrine\ORM\EntityManagerInterface;
use Doctrine\ORM\EntityRepository;

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

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

    /**
     * @return Post[]
     */
    public function getAll(): array
    {
        // ...
    }
}

...和第二个存储库

namespace App\Repository;

use App\Entity\Post;
use Doctrine\ORM\EntityManagerInterface;
use Doctrine\ORM\EntityRepository;

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

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

    /**
     * @return Post[]
     */
    public function getUnpublished(): array
    {
        // ...
    }
}


您可以在How to use Repository with Doctrine as Service in Symfony帖子

中详细了解此概念和为什么

答案 1 :(得分:1)

嗯,我真的不知道这是一个很好的做法但你可以创建一个没有链接实体的存储库(我的意思是,不是用ORM注释)

所以我只是在service.yml中创建它:

renting.metadata.car:
    class: Doctrine\ORM\Mapping\ClassMetadata
    arguments: [ %car% ]

而且:

repair.repository.car:
    class: carRepository
    arguments: [@doctrine.orm.entity_manager, @renting.metadata.car]

这是有效的