簡體   English   中英

在 Symfony 中用 doctrine 創建兩個數據庫的問題

[英]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'

目標

好吧,我的目標是嘗試使用此命令行創建數據庫來運行我的工作並轉到下一個

源文件

.gitlab-ci.yml

這是我嘗試執行的工作

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

配置/測試/教義.yaml

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM