首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Symfony理论创建两个数据库的问题

用Symfony理论创建两个数据库的问题
EN

Stack Overflow用户
提问于 2021-10-30 01:48:09
回答 1查看 555关注 0票数 0

我正在做一个Symfony项目,使用理论作为ORM,MariaDB作为驱动程序。

为了测试我的不同工作,我和在MacOs本地的gitlab-runner一起工作。

问题

我创建一个作业来测试不同数据库的创建以及这两个数据库的迁移。

我使用symfony-cli命令行从理论的文件配置创建我的数据库(参见源文件一节)

使用symfony-cli创建数据库的命令行。

代码语言:javascript
复制
$ php bin/console doctrine:database:create --env=test --if-not-exists --connection=[CONNECTION_NAME]

命令行被要求运行时的错误提示

代码语言:javascript
复制
$ 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

这就是我要执行的任务

代码语言:javascript
复制
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

配置/测试/理论。

代码语言:javascript
复制
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'
EN

回答 1

Stack Overflow用户

发布于 2022-02-15 21:48:59

url: '%env(resolve:DATABASE_URL)%cf_CleanerFuture'在您的config/test/doctrine.yaml文件中:

部件cf_CleanerFuture将添加到变量DATABASE_URL的字符串值中,该变量是在.env文件中定义的。

如果数据库连接的.env文件值包含以下内容

代码语言:javascript
复制
DATABASE_URL="mysql://symfony:symfony@database:3306/symfony?serverVersion=8.0"

配置的处理内容将是

代码语言:javascript
复制
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'似乎是有效的(理论可以连接,参数serverVersion将被忽略,如果不能使用),但是参数serverVersion的值现在是8.0cf_central。这是没有意义的,因为它不是一个有效的版本号,而且您还没有配置不同的数据库连接。

更建议使用两个不同的环境变量,并将整个连接URL存储在以下变量中:

代码语言:javascript
复制
# 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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69776225

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档