Symfony 4,一个存储库类为多个实体提供服务



symfony的新手。我正在遵循此文档。我从从另一个应用程序导入的表中映射了多个实体,这些表没有自动创建存储库,并且有很多实体可以手动完成。但是,我想创建一个接口多个实体的单个存储库类。

根据文档,我当前的存储库是

Product repository
class ProductRepository extends ServiceEntityRepository
{
public function __construct(RegistryInterface $registry)
{
parent::__construct($registry, Product::class);
}

我将在我的控制器中使用它,例如,

$respository = $this->getDoctrine()->getRepository(Product::class);

但是我还有其他实体类,

Customer, User

仅举几例。

如何或是否可以仅使用Product Respository与这些其他实体进行交互,例如

$respositoryUser = $this->getDoctrine()->getRepository('User');

或者是否可以从现有实体自动生成存储库。

您可以像创建产品一样为任何实体创建存储库。 这将起作用,并为用户提供一个标准的实体存储库:

$userRepository = $this->getDoctrine()->getRepository(User::class);

如果你想找到一些需要更多计算的特定内容,你将创建一个专用的存储库。您仍将以相同的方式获取存储库,除非您希望将其直接注入控制器或服务。如果是这种情况,只需在实体中指定存储库即可。

看起来你正在寻找你在另一个环境(如Java/Persistence)中使用的等效工具...... 我认为您正在查看的是一组相关实体的 DaoService,而不是共享存储库。自定义存储库类根据定义绑定到类实体,尝试共享他的函数将导致映射混乱。

通过围绕 DaoService 类组织代码,您将有机会在一个地方重新组合有关这些实体的所有数据访问。

那么如何组织你的道服务代码呢?

  1. 您通常使用默认实体管理器...更好地将实体分组到同一数据库空间中。但是,多个实体也可以谨慎管理。
  2. 使用通用存储库对组中的每个实体

    $userRepo = $this->em->getRepository(User::class)

    $prodRepo = $this->em->getRepository(Product::class)

如您所见,您的需求...

  1. 请记住,这里的主要重点是代码组织的模块化,然后确保在此类中集中并针对每个实体:
    • CRUD 操作和特定搜索功能
    • 与这些实体组相关的业务逻辑
    • 针对某些业务功能的基于模块的服务
    • 您还可以定义此服务类将实现的接口,从而使模型更灵活,并且易于该接口类使用。 如果您的服务定义良好,它将使客户端控制器更加轻巧和干净,并成为 MVC 解决方案的模型端。

相关内容

  • 没有找到相关文章

最新更新