Symfony Doctrine实体经理和存储库



我理解收益或存储库模式,但我就是不理解Symfony3条令中有DoctrineORMEntityManagerDoctrineORMEntityRepository

  1. 两者之间有什么区别
  2. 存储库应该注入控制器还是实体管理器?

    编辑正确的问题应该是:从控制器访问存储库的正确方式是什么?

    • 是否应该将存储库作为服务注入控制器
    • 是否应该将存储库作为服务注入另一个服务
  3. 实体管理器是否应该包含任何查询
    编辑正确的问题应该是:服务是否应该包含查询?@MateuszSip已经解释过,这可以通过注入实体管理器来实现

  4. 是否应该放入像getAvailableManagers这样的自定义函数存储库还是服务?(其中manager是存储库确定available manager)的一些逻辑

  5. findAllManager这样的更通用的函数应该在存储库中还是实体管理器中呢

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

干杯,

编辑与@MateuszSip(谢谢,伙计)交谈时,我决定用下面的例子让我的问题更清楚。请注意,以下代码并不代表真正的问题

控制器

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 DoctrineORMEntityRepository
{
public function findAvailableManagers() 
{
...
return $managers
}
public function checkCapability($managers, $type)
{
...
return $capableManagers
}
}

服务

class ManagementService 
{
... I am not sure what should be here.
}
  1. EntityManager用于管理条令相关对象,因此:
    • 您可以持久化实体对象(它现在由条令管理,并准备保存)
    • 您可以删除实体对象(以便稍后删除)
    • 您可以刷新,它将触发挂起的操作
    • 您可以获得一个存储库(以获得您需要的对象),或者使用通用api通过主键获得对象等等

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

Repository是一种标准化对实体的访问的模式。

  1. 如果你的应用程序很复杂,你应该向你的控制器注入一个单独的服务。因此,有一个UserSaver服务(作为一个例子),它使用entityManager来创建/更新用户,并使用UserRepository来创建UserFinder(或命名良好的东西),UserRepository负责根据定义的标准获取用户。

  2. 您可以使用实体管理器创建查询,但em本身不能包含查询。

  3. 在我看来,在服务中定义一个方法,并在UserRepository中定义相应的方法。此时,您想要的所有内容都应该由数据库获取,但以后可能会更改。

  4. 在存储库中。findByRole(role=manager)、findIsActive、findOneBySecurityNumber等方法依赖于存储库。

相关内容

  • 没有找到相关文章

最新更新