【问题标题】:Store Doctrine 2 ORM entities each in a different location将 Doctrine 2 ORM 实体分别存储在不同的位置
【发布时间】:2013-11-08 16:09:05
【问题描述】:

免责声明:我是 Doctrine 的新手

我目前正在构建一个需要极高模块化和灵活性的项目,并且有 2 个与之相关的问题。我的项目认为以下是“理想的”简化结构:

PackageA
    PackageA.php
    PackageA.orm.yml
PackageB
    PackageB.php
    PackageB.orm.yml
PackageC
    PackageC.php
    PackageC.orm.yml

由于这些包的添加或删除相当频繁,我的目标是让每个包定义自己的持久性映射(如上所示)。但是,我见过的学说配置示例,将所有映射文件(xml 或 yml)放在一个目录中,在这种情况下,我的结构是:

PackageA
    PackageA.php
PackageB
    PackageB.php
PackageC
    PackageC.php
Config
    PackageA.orm.yml
    PackageB.orm.yml
    PackageC.orm.yml

问题 1: 是否可以将每个映射配置文件保存在不同的位置(如第一个示例),如果可以,如何使用这种配置实例化 EntityManager(I'已阅读安装文档,但似乎找不到此功能。

问题 2: 我已经了解了如何使用命令行工具创建架构,但理想情况下,我希望每个包都创建自己的架构,因此如果将 PackageD 安装到系统上并且它的模式还不存在,它能够即时创建它。 Doctrine 可以做到吗?

注意:我已经看到了一些使用 SchemaTool 按需创建模式的能力,但创建所有模式似乎受限,是这样吗?

【问题讨论】:

    标签: php orm doctrine


    【解决方案1】:

    Q1:也许可以,但你必须写教义的核心代码(不是最好的) Q2:是的,这就是使用 orm 的美妙之处。您必须为此运行命令行脚本,例如doctrine tools reference

    【讨论】:

      【解决方案2】:

      为有需要的人回答我自己的问题:

      使用 SimplifiedYamlDriver 可以最轻松地拆分所有地图和实体的位置。这是一个简单的例子:

      <?php
      
      // Generate an array of your structure
      $maps = array(
       'PackageA/Entities' => 'Your\PackageA\Entities',
       'PackageB/Entities' => 'Your\PackageB\Entities'
      );
      
      $config = new Doctrine\ORM\Configuration;
      $driver = new Doctrine\ORM\Mapping\Driver\SimplifiedYamlDriver($maps);
      
      $config->setMetadataDriverImpl($driver);
      
      // ... finish configuration
      // ... create connection params $conn
      
      $em = new Doctrine\ORM\EntityManager($conn, $config);
      

      上面的代码(加上伪代码)创建了一个新的实体管理器,可以访问更模块化结构的实体。请记住,在您的 Entity.orm.yml 映射文件中,您应该使用实际实体的完全限定命名空间。

      更多详情:Yaml Mapping

      【讨论】:

        猜你喜欢
        • 2017-05-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-07-27
        • 2016-05-05
        相关资源
        最近更新 更多