1

我正在 Symfony 2.2 中构建一个应用程序。

我为我的一个实体使用自定义存储库类。我像这样包括它:

@ORM\Entity(repositoryClass="MyApp\MainBundle\Entity\CategoryRepository")

我想在我的类别实体上使用来自其他两个存储库类的方法。

 @ORM\Entity(repositoryClass="Gedmo\Sortable\Entity\Repository\SortableRepository")
 @ORM\Entity(repositoryClass="Gedmo\Tree\Entity\Repository\NestedTreeRepository")

然而,该实体只需要一个 repositoryClass。如何将所有这三个存储库用于同一个实体?

4

2 回答 2

2

我相信,每个实体只能有一个存储库。所以你参考了 ORM\Entity(repositoryClass="MyApp\MainBundle\Entity\CategoryRepository")

如果您必须使用存储库中的其他存储库,

您可以获取这些存储库的 EntityManager(如果不相同),例如:$em2 = whatEverIsTheEntity()

现在您可以将 CategoryRepository 中的代理方法用于要使用的存储库中的方法。例如:$em2->getMethodFromEm2()

注意:但除非确实需要,否则我不喜欢上述解决方案。我宁愿创建一个将 Doctrine Entity Manager 作为依赖注入的服务层。该服务层将连接到所有存储库并收集您想要实现的最终结果(在控制器中使用)。这样,代码也将更加清晰和可测试。

希望这可以帮助。

于 2013-05-15T20:28:49.060 回答
1

存储库是类(所以实体)保留的。如果您从超类继承(即使这些类不直接继承,但 repos 可以),那么您可以让您的存储库 ( CategoryRepository) 由其他两个扩展(一个扩展另一个,因为 PHP 不允许多个类扩大)。

差不多就是这样

class NestedTreeRepository extends SortableRepository
{
}

class CategoryRepository extends NestedTreeRepository 
{
}

不知道这是否符合您的需求,但这是一种实现您在这里尝试做的方式(如果是唯一的方式,我不会感到惊讶)

于 2013-05-15T09:19:25.237 回答