【问题标题】:Symfony Doctrine Migrations, how can I use multiple entity managersSymfony Doctrine Migrations,我如何使用多个实体管理器
【发布时间】:2015-01-22 19:36:41
【问题描述】:

使用 Symfony 2.5 和 Doctrine 2.2,我有几个用于我正在开发的应用程序的数据库,我们称一个为“主要”,另一个为“次要”。当前配置了两个实体管理器。在一次迁移中,我想在“Secondary”中创建一个表,但它只想在“Main”中创建表。

迁移可以是 ContainerAware,因此我可以获得另一个 EntityManager,但我无法覆盖默认的。有没有可以帮忙的?提前致谢!

【问题讨论】:

    标签: php mysql symfony doctrine-orm database-migration


    【解决方案1】:

    生成diff时只需传递--em参数即可。

    例子:

    php app/console doctrine:migrations:diff --em=uac # will use uac entity manager
    php app/console doctrine:migrations:diff # will use the default entity manager
    

    要从删除使用中排除自定义表:

    doctrine:
        dbal:
            schema_filter: ~^(?!t_)~
    

    根据this 文档,或者您可以在运行时传递过滤器参数:

    app/console doctrine:migrations:diff  --em=uac --filter-expression=/whatever/
    

    【讨论】:

    • 如果我有两个实体经理让我们说identitycatalog 身份将创建用户表目录将创建与课程相关的表,但在运行迁移时:diff --em=catalog 用户表是被丢弃。如何解决?
    • @Daskul,您是否将所有表存储在一个数据库中,通常当人们有多个实体管理器时,他们也有多个数据库?
    • 我只有一个数据库。我在不同的系统或上下文中使用不同的实体管理器。就像在一个上下文中我有 Client 类映射到 clients 表。在另一个上下文中,我有 Inquirer 类,它也映射到 clients 表,但只需要比 Client 类更少的列
    • 是的,迁移完成了它应该做的事情,但是,您可以按照本文档中的建议从 diff 中排除表:http://symfony.com/doc/current/bundles/DoctrineMigrationsBundle/index.html#manual-tables 如果还可以通过传递 @ 在 diff 运行时过滤表987654337@参数
    • 我读到过,但我希望有更好的解决方案,我不想每次迁移时都考虑正则表达式。我正在考虑创建类似migrations 实体管理器的东西,其唯一目的是用于迁移。我的问题是我在config.yml 上的每个目录上添加映射,这会导致错误再次映射多个实体上的一个表。 (例如,我有目录 Catalog/ 和 Inquiry/ )我在每个目录上都有实体,映射到 clients 表。有没有办法排除另一个目录上的实体以避免冲突?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-29
    • 2014-07-12
    • 2018-09-15
    相关资源
    最近更新 更多