[英]Problem to create two databases with doctrine in Symfony
我正在做一個 Symfony 項目,使用 doctrine 作為 ORM 和 MariaDB 作為驅動程序。
為了測試我的不同工作,我在 MacOs 本地使用 gitlab-runner。
我創建了一個作業來測試我不同數據庫的創建以及兩者的遷移。
我正在使用 symfony-cli 命令行從 doctrine 的文件配置創建我的數據庫(參見源文件部分)
使用 symfony-cli 創建數據庫的命令行
$ php bin/console doctrine:database:create --env=test --if-not-exists --connection=[CONNECTION_NAME]
要求命令行from運行時的錯誤提示
$ php bin/console doctrine:database:create --env=test --if-not-exists --connection=CleanerFuture
Could not create database `cf_CleanerFuture` for connection named CleanerFuture
An exception occurred while executing 'CREATE DATABASE `cf_CleanerFuture`':
SQLSTATE[42000]: Syntax error or access violation: 1044 Access denied for user 'myapptest'@'%' to database 'cf_CleanerFuture'
好吧,我的目標是嘗試使用此命令行創建數據庫來運行我的工作並轉到下一個
這是我嘗試執行的工作
doctrine-migrations:
image: php:7.3
stage: Migrations
services:
- name: mysql:5.7
alias: mysql
variables:
ENV: test
MYSQL_ROOT_PASSWORD: pass_test
MYSQL_DATABASE: cf_Central
MYSQL_USER: myapptest
MYSQL_PASSWORD: myapptest
DATABASE_URL: 'mysql://myapptest:myapptest@mysql:3306/'
before_script:
- apt-get update
- apt-get install -y git libzip-dev
- curl -sSk https://getcomposer.org/installer | php -- --disable-tls && mv composer.phar /usr/local/bin/composer
- docker-php-ext-install mysqli pdo pdo_mysql zip
- curl -sS https://get.symfony.com/cli/installer | bash
- mv /root/.symfony/bin/symfony /usr/local/bin/symfony
- composer remove ext-xdebug
- composer install
script:
- php bin/console doctrine:database:drop --force --if-exists --env=test --connection=default
- php bin/console doctrine:database:drop --force --if-exists --env=test --connection=CleanerFuture
- php bin/console doctrine:database:create --env=test --if-not-exists --connection=CleanerFuture
- php bin/console doctrine:migrations:migrate --env=test
allow_failure: false
doctrine:
dbal:
default_connection: default
connections:
default:
url: '%env(resolve:DATABASE_URL)%cf_central'
server_version: "mariadb-10.4.11"
driver: 'pdo_mysql'
charset: utf8
CleanerFuture:
url: '%env(resolve:DATABASE_URL)%cf_CleanerFuture'
server_version: "mariadb-10.4.11"
driver: 'pdo_mysql'
charset: utf8
orm:
auto_generate_proxy_classes: true
default_entity_manager: default
entity_managers:
default:
naming_strategy: doctrine.orm.naming_strategy.underscore_number_aware
connection: default
mappings:
Central:
is_bundle: false
type: annotation
dir: '%kernel.project_dir%/src/Entity/Central'
prefix: 'App\Entity\Central'
CleanerFuture:
naming_strategy: doctrine.orm.naming_strategy.underscore_number_aware
connection: CleanerFuture
mappings:
Client:
is_bundle: false
type: annotation
dir: '%kernel.project_dir%/src/Entity/Client'
prefix: 'App\Entity\Client'
url: '%env(resolve:DATABASE_URL)%cf_CleanerFuture'
在你的config/test/doctrine.yaml
文件中:
cf_CleanerFuture
部分將添加到.env
文件中定義的變量DATABASE_URL
的字符串值中。
如果數據庫連接的.env
文件值包含類似
DATABASE_URL="mysql://symfony:symfony@database:3306/symfony?serverVersion=8.0"
您的配置的處理內容將是
doctrine:
dbal:
default_connection: default
connections:
default:
url: 'mysql://symfony:symfony@database:3306/symfony?serverVersion=8.0cf_central'
'mysql://symfony:symfony@database:3306/symfony?serverVersion=8.0cf_central'
貌似有效(doctrine可以連接,參數serverVersion
如果不能用會忽略),但是參數serverVersion
的值現在是8.0cf_central
。 這沒有意義,不是有效的版本號,而且您還沒有配置不同的數據庫連接。
更推薦使用兩個不同的環境變量,將整個連接 URL 存儲在這些變量中:
# config/packages/doctrine.yaml
doctrine:
dbal:
default_connection: default
connections:
default:
# configure these for your database server
url: '%env(resolve:DATABASE_URL)%'
driver: 'pdo_mysql'
server_version: '5.7'
charset: utf8mb4
customer:
# configure these for your database server
url: '%env(resolve:DATABASE_CUSTOMER_URL)%'
driver: 'pdo_mysql'
server_version: '5.7'
charset: utf8mb4
另請參閱描述如何配置多個數據庫連接的 Symfony 文檔: https://symfony.com/doc/current/doctrine/multiple_entity_managers.html
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.