可以在Symfony2中使用不同的数据库凭据进行Doctrine迁移吗?

时间:2015-05-21 16:09:51

标签: symfony permissions doctrine doctrine-migrations

如何配置Symfony的Union All使用不同的数据库身份验证凭据到DoctrineMigrationsBundle - 或者至少与应用程序中其他位置使用的DoctrineBundle连接不同?

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

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

我知道这是一篇很老的文章,但是由于它是在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... 

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

###> 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