Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/244.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何使用Symfony中的另一个连接执行条令迁移?(使用DoctrinBundle 3.0.x)_Php_Postgresql_Symfony_Doctrine - Fatal编程技术网

Php 如何使用Symfony中的另一个连接执行条令迁移?(使用DoctrinBundle 3.0.x)

Php 如何使用Symfony中的另一个连接执行条令迁移?(使用DoctrinBundle 3.0.x),php,postgresql,symfony,doctrine,Php,Postgresql,Symfony,Doctrine,我使用DoctrineBundle和DoctrineBundle开发了一个Symfony应用程序。条令和Symfony依赖项的版本如下: composer.json 出于安全原因,我想使用两种不同的数据库连接,默认连接是一个数据库用户,该数据库用户对应用程序使用的表具有选择、插入、更新和删除权限(基本上是对数据的所有权限,它是应用程序用户),另一个连接是migrations,该数据库用户对结构具有权限:CREATE,改变,放下。。。在桌子上 这两个连接都在配置中定义: config/packag

我使用DoctrineBundle和DoctrineBundle开发了一个Symfony应用程序。条令和Symfony依赖项的版本如下:

composer.json

出于安全原因,我想使用两种不同的数据库连接,默认连接是一个数据库用户,该数据库用户对应用程序使用的表具有选择、插入、更新和删除权限(基本上是对数据的所有权限,它是应用程序用户),另一个连接是migrations,该数据库用户对结构具有权限:CREATE,改变,放下。。。在桌子上

这两个连接都在配置中定义:

config/packages/doctrine.yaml:

对于以前版本的捆绑包,在Symfony 4.4应用程序中,条令:migration:migrate命令有一个-db选项,它允许选择用于执行迁移的连接:

php bin/console doctrine:migrations:migrate --db=migrations --no-interaction
但是,在捆绑包的3.0.x版本中,此选项已消失。只有-configuration和-db配置选项似乎可以实现相同的效果,但我不知道如何使其工作

我尝试的是:

在doctor.yaml中添加了第二个实体管理器,以使用迁移连接无映射-我只想使用它来执行迁移,这是SQL命令: doctrine.yaml:

我保留了默认的config/packages/doctrine_migrations.yaml,它使用默认的实体管理器,并添加了第二个文件: 原则_迁移_db _owner.yaml

已使用此文件启动迁移: 但是,我在yaml文件中有一个关于doctrine_migrations密钥的错误。。。我试图删除它,但在迁移路径上又出现了一个错误


是否有人可以提供有关如何使用此选项或其他解决方案来实现我想要的目标的提示?

我最后给出了一个解决方案,在我看来,这个解决方案甚至比我在以前版本的Doctrine migrations捆绑包中所做的更干净

在应用程序中,我只使用定义为环境变量或在.env中的默认数据库url:

config/packages/doctrine.yaml 教条: dbal: url:“%envrolve:数据库\ url%” 驱动程序:“pdo_pgsql” 字符集:UTF8 config/packages/doctrine_migrations.yaml 原则(u)迁移: 迁移路径: 命名空间是任意的,但应与App\Migrations不同 因为迁移类不应该自动加载 “doctrinMigrations”:“%kernel.project\u dir%/migrations” 而且,当我想使用特权数据库用户执行迁移时(在database_MIGRATIONS_URL变量中定义),我会在命令中直接将其作为env var传递:

DATABASE\u URL=$DATABASE\u MIGRATIONS\u URL php bin/控制台原则:迁移:迁移 变量定义如下:

DATABASE_MIGRATIONS_URL=postgresql://$DB_OWNER:$DB_OWNER_PASS@$DB_HOST:5432/$DB_NAME?serverVersion=$PG_VERSION
doctrine:
    dbal:
        default_connection: default
        connections:
            default:
                url: '%env(resolve:DATABASE_URL)%'
                driver: 'pdo_pgsql'
                server_version: '11.1'
                charset: UTF8
            migrations:
                url: '%env(resolve:DATABASE_MIGRATIONS_URL)%'
                driver: 'pdo_pgsql'
                server_version: '11.1'
                charset: UTF8
php bin/console doctrine:migrations:migrate --db=migrations --no-interaction
doctrine:
    dbal:
        default_connection: default
        connections:
            default:
                url: '%env(resolve:DATABASE_URL)%'
                driver: 'pdo_pgsql'
                charset: UTF8
            # Used to execute database migrations - conection with the owner user
            migrations:
                url: '%env(resolve:DATABASE_MIGRATIONS_URL)%'
                driver: 'pdo_pgsql'
                charset: UTF8

    orm:
        auto_generate_proxy_classes: true

        default_entity_manager: default
        entity_managers:
            default:
                connection: default
                naming_strategy: doctrine.orm.naming_strategy.underscore_number_aware
                auto_mapping: true
            # Used to create and execute database migrations
            migrations:
                connection: migrations
doctrine_migrations:
    migrations_paths:
        'DoctrineMigrations': '%kernel.project_dir%/migrations'
    em: migrations
php bin/console doctrine:migrations:migrate --configuration=./config/packages/doctrine_migrations_db_owner.yaml