运行 在 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" 凭据而不是主要凭据。
我有一个带有 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" 凭据而不是主要凭据。