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 类组织代码,您将有机会在一个地方重新组合有关这些实体的所有数据访问。
那么如何组织你的道服务代码呢?
- 您通常使用默认实体管理器...更好地将实体分组到同一数据库空间中。但是,多个实体也可以谨慎管理。
-
使用通用存储库对组中的每个实体
$userRepo = $this->em->getRepository(User::class)
$prodRepo = $this->em->getRepository(Product::class)
如您所见,您的需求...
- 请记住,这里的主要重点是代码组织的模块化,然后确保在此类中集中并针对每个实体:
- CRUD 操作和特定搜索功能
- 与这些实体组相关的业务逻辑
- 针对某些业务功能的基于模块的服务
- 您还可以定义此服务类将实现的接口,从而使模型更灵活,并且易于该接口类使用。 如果您的服务定义良好,它将使客户端控制器更加轻巧和干净,并成为 MVC 解决方案的模型端。