Symfony是否有ORM接口?

时间:2017-01-06 13:48:32

标签: php symfony orm

我想知道是否有一个不同的ORM应该为Symfony实现的接口。

当我构建一个接受ORM(现在是Doctrine)的服务并希望声明类型时,问题出现了。

我猜不同的ORM有不同的行为和类......在这些情况下,如果想要稍后切换,如何构建不依赖于特定ORM的实体?

1 个答案:

答案 0 :(得分:5)

一般来说,Symfony对您选择的ORM是不可知的。

standard edition与Doctrine捆绑在一起,还包含一些“桥接”代码,以简化集成。

但是,您可以使用任何您想要的ORM。例如,众所周知,Propel也可以与Symfony一起使用。 Propel团队还维持integration bundle

ORM必须遵守的形式描述意义上没有“界面”。没有interface SymfonyOrmInterface {}这样的东西。

想一想,Symfony如何以及为什么要求这个? Symfony是一个基于一组松散耦合组件构建的HTTP框架。大多数这些组件甚至不知道ORM是什么,或者当前应用程序中是否有一个。

您通常会通过编辑器安装ORM,它将在您的业务代码中提供(假设它支持使用PSR-0 / -4进行自动加载)。

当然,为了将ORM正确地集成到Symfony中,有一些约定和功能,例如:

  • CLI命令,例如用于架构更新,
  • 通过全局config.yml和parameters.yml文件管理配置值,
  • 通过依赖注入提供服务和依赖。

这些是在集成包中实现的,通常由相应的ORM供应商提供。

对于您的商家代码,这意味着您不能只将一个ORM替换为另一个ORM。 ORM在存储抽象,缓存,查询,水合等方面存在显着差异。更换ORM总是需要您将业务逻辑调整为某些exent,而不仅仅是在Symfony项目中。