【问题标题】:Can one use different database credentials for Doctrine migrations in Symfony2?Symfony2 中的 Doctrine 迁移可以使用不同的数据库凭据吗?
【发布时间】:2015-05-21 16:09:50
【问题描述】:

如何配置 Symfony 的 DoctrineMigrationsBundle 以对其 DoctrineBundle 使用不同的数据库身份验证凭据,或者至少使用与应用程序中其他地方使用的不同的 DoctrineBundle 连接?

我们希望应用程序仅以有限的权限连接到数据库,例如无法发出 DDL 命令,例如 CREATEALTERDROP。但是,迁移将需要执行此类 DDL 命令,因此应以具有提升权限的用户身份连接。这可能吗?

【问题讨论】:

    标签: symfony permissions doctrine doctrine-migrations


    【解决方案1】:

    是的。只需 define a new entity manager 提供正确的连接详细信息,然后在运行迁移命令时使用该实体管理器

    $ php app/console doctrine:migrations:version --em=new_entity_manager
    

    【讨论】:

    • 实际上,我不相信这是我想要的……--db-configuration 参数看起来更正确。你能帮我理解如何在两者之间进行选择吗?
    • 我不能 - 我对你想要做的事情没有直接经验 - 我只是戳到包中的命令并注意到它们都接受 --em 参数跨度>
    【解决方案2】:

    我知道这是一篇很老的帖子,但由于它是在 Google 搜索中显示的那个主题,所以我添加了我的解决方案,使用 Symfony 4。

    首先,您只需在config/doctrine.yml 中定义一个新的数据库连接(不需要新的实体管理器):

    doctrine:
        dbal:
            default_connection: default
            connections:
                default:
                    # This will be the connection used by the default entity manager
                    url: '%env(resolve:DATABASE_URL)%'
                    driver: 'pdo_pgsql'
                    server_version: '11.1'
                    charset: UTF8
                migrations:
                    # This will be the connection used for playing the migrations
                    url: '%env(resolve:DATABASE_MIGRATIONS_URL)%'
                    driver: 'pdo_pgsql'
                    server_version: '11.1'
                    charset: UTF8
    
        orm:
            # As usual... 
    

    您还必须在 .env 文件或环境变量中使用管理员凭据定义 DATABASE_MIGRATIONS_URL

    ###> doctrine/doctrine-bundle ###
    # Format described at http://docs.doctrine-project.org/projects/doctrine-dbal/en/latest/reference/configuration.html#connecting-using-a-url
    DATABASE_URL=postgresql://app_user:app_user_pass@localhost:5432/db
    # Database url used for migrations (elevated rights)
    DATABASE_MIGRATIONS_URL=postgresql://admin_user:admin_user_pass@localhost:5432/db
    ###< doctrine/doctrine-bundle ###
    

    然后,只需使用 --db 选项执行迁移,并传递新连接的名称:

    php bin/console doctrine:migrations:migrate --db=migrations
    

    【讨论】:

      猜你喜欢
      • 2011-03-24
      • 1970-01-01
      • 1970-01-01
      • 2013-12-28
      • 1970-01-01
      • 2014-10-26
      • 2012-11-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多