【问题标题】:Generate Entities with Doctrine into separate namespace使用 Doctrine 生成实体到单独的命名空间中
【发布时间】:2012-11-29 16:14:03
【问题描述】:

我正在关注这里的文档:

这些是命令

php app/console doctrine:mapping:convert xml ./src/Acme/BlogBundle/Resources/config/doctrine/metadata/orm --from-database --force
php app/console doctrine:mapping:import AcmeBlogBundle annotation
php app/console doctrine:generate:entities AcmeBlogBundle

我在这里看到了新的实体"

Acme/BlogBundle/AcmeBlogBundle/Entity

但我想知道如何像这样将实体添加到他们自己的命名空间中

Acme/BlogBundle/AcmeBlogBundle/Entity/Foo
Acme/BlogBundle/AcmeBlogBundle/Entity/Bar

这样我就可以将 Foo 和 Bar 数据库的实体分开。

更新:

或者应该是这样的结构:

Acme/BlogBundle/AcmeBlogBundle/Foo/Entity
Acme/BlogBundle/AcmeBlogBundle/Bar/Entity

想法?

【问题讨论】:

  • 我对你到底在问什么感到有点困惑。您想为每个实体创建一个新的命名空间吗?这是没有意义的。那么 Foo 是 /Acme/BlogBu​​ndle/AcmeBlogBu​​ndle/Entity/Foo/Foo,Bar 是 /Acme/BlogBu​​ndle/AcmeBlogBu​​ndle/Entity/Bar/Bar,它们都是它们自己命名空间中的唯一对象。这真的是你要找的吗?
  • 我有多个数据库,我想按数据库组织实体,所以 Foo 数据库应该进入 Foo 目录和 Bar 目录中的 Bar 数据库。这只是为了轻松识别实体与哪个数据库相关
  • 哦,这是一个非常有趣的问题。不幸的是,我不知道:(。我当前的项目也有多个数据库,但它们具有相同的结构和不同的数据。

标签: php symfony namespaces doctrine entity


【解决方案1】:

如果您查看文档的How to work with Multiple Entity Managers and Connections 部分,您会注意到您可以将捆绑实体绑定到一个或多个entity managers。它们中的每一个都与特定的数据库连接相关。

例如,如果我定义了两个数据库连接(first_connection 和 second_connection),我可以添加两个实体管理器,如下所示,

entity_managers:
    first_manager:
        connection:       first_connection
        mappings:
            MyBundle:
                dir:      Path/To/EntityFolder/Foo/
    second_manager:
        connection:       second_connection
        mappings:
            MyBundle:
                dir:      Path/To/EntityFolder/Bar/

然后您可以在entity generation process 的前两个步骤中指定要使用的正确实体管理器,

php app/console doctrine:mapping:convert xml ./src/Acme/BlogBundle/Resources/config/doctrine/metadata/orm --from-database --force --em=first_manager --filter=MyTable

注意:--filter 选项用于允许您单独生成实体。

php app/console doctrine:mapping:import AcmeBlogBundle annotation --em=first_manager --filter=MyTable

php app/console doctrine:generate:entities AcmeBlogBundle

然后根据绑定到的连接将您的实体放入正确的文件夹中。

【讨论】:

  • 一定错过了,谢谢
  • [InvalidArgumentException] 捆绑“dir”不存在或未启用。
  • 这行得通,除了我有一个小问题:--filter=MyTable 不起作用。如果我删除该选项,我会得到数据库中的所有表,如果我添加该选项,我会得到:“没有要处理的元数据类。”,想法?
  • @Phill,你是对的。我要么得到“db没有映射信息”,要么得到“没有要处理的元数据类”。错误。见this comment for explanation
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-15
  • 2017-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多