gpt4 book ai didi

doctrine-orm - Symfony Doctrine 实体管理器和存储库

转载 作者:行者123 更新时间:2023-12-04 04:57:42 25 4
gpt4 key购买 nike

我了解好处或存储库模式,但我就是无法理解 Symfony3 Doctrine 中有 Doctrine\ORM\EntityManager\Doctrine\ORM\EntityRepository

  • 两者有什么区别?
  • 存储库是否应该注入(inject) Controller 或实体管理器?

    编辑
    正确的问题应该是:从 Controller 访问存储库的正确方法是什么?
  • 是否应该将存储库作为服务注入(inject) Controller ?
  • 是否应该将存储库作为服务注入(inject)另一个服务?
  • 实体管理器是否应该包含任何查询?
    编辑
    正确的问题应该是:服务是否应该包含查询? @MateuszSip 已经解释过,可以通过注入(inject) Entity Manager
  • 来完成
  • 应该像 getAvailableManagers 这样的自定义函数吗?放入
    存储库或服务? (其中 manager 是存储库,并且
    确定available manager的一些逻辑)
  • findAllManager 这样更通用的函数怎么样? ,它应该在存储库还是实体管理器中?

  • 目前我正在使用 Symfony3。非常感谢你

    干杯,

    编辑
    与@MateuszSip(感谢伙伴)交谈后,我决定通过下面的示例使我的问题更清楚。请注意,下面的代码并不代表真正的问题

    Controller
    Class ManagementController
    {
    public function assignManager($projectType)
    {
    // Grabbing a service
    $s = $this->get('mycompany_management_management_service')

    $managers = $s->findAvailableManagers();
    $managers = $s->checkCapability($managers, $projectType);

    return $managers
    }
    }

    存储库
    class ManagerRepository extends \Doctrine\ORM\EntityRepository
    {
    public function findAvailableManagers()
    {
    ...
    return $managers
    }

    public function checkCapability($managers, $type)
    {
    ...
    return $capableManagers
    }
    }

    服务
    class ManagementService 
    {
    ... I am not sure what should be here.
    }

    最佳答案

  • EntityManager 用于管理与 Doctrine 相关的对象,因此:
  • 你可以持久化一个实体对象(它现在由 Doctrine 管理,并准备保存)
  • 你可以删除一个实体对象(所以稍后会被删除)
  • 你可以刷新,它会触发挂起的操作
  • 您可以获取存储库(获取您需要的对象)或使用通用 api 通过主键获取对象

  • 它是一个管理对象状态及其与数据库的关系的类。

    存储库是一种标准化对实体的访问的模式。
  • 如果您的应用程序很复杂,您应该向 Controller 注入(inject)单独的服务。因此,有一个 UserSaver 服务(例如),它使用 entityManager 创建/更新用户,而 UserFinder(或其他名称)使用 UserRepository 负责按定义的标准获取用户。
  • 您可以使用实体管理器创建查询,但 em 本身不能包含查询。
  • 在我看来,在服务中定义一个方法,在你的 UserRepository 中定义一个相应的方法。此时,您想要的所有内容都应该由数据库获取,但以后可以更改。
  • 在存储库中。方法如:findByRole(role=manager)、findIsActive、findOneBySecurityNumber 依赖于存储库。
  • 关于doctrine-orm - Symfony Doctrine 实体管理器和存储库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37534945/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com