运行 在 Symfony 中迁移 Doctrine 时如何使用不同的连接设置?

How to use different connection settings when running Doctrine migrations in Symfony?

我有一个带有 pgSQL DB 的 Symfony 项目。

我有两个数据库用户,一个拥有 select/update 的网络权限(我们称之为 usr_web),第二个拥有 create/alter table 的迁移权限(usr_admin).

我想将 usr_web 用于我的网站前端,并使用 usr_admin 通过 doctrine:migrations:migrate.

进行 运行 迁移

我怎样才能做到这一点?

最简单的方法就是为迁移和前端流程使用不同的环境。

假设您有默认的 Symfony 4 学说设置:

doctrine:
    dbal:
        url: '%env(resolve:DATABASE_URL)%'

并且这些设置存储在您的 .env 文件中,那么您可以在根路径中有一个 .env.migration 文件,内容如下:

DATABASE_URL=pgsql://usr_admin:admin_password@db_host:5432/db_name

这个文件不会被正常读取(你可能应该确保这个文件被 gitignored 所以它不会在你的 repo 中结束)。但是在执行迁移时,您只需执行:

APP_ENV=migration bin/console doctrine:migration:migrate

并且该命令将 运行 使用 "admin" 凭据而不是主要凭据。