Как исправить миграции, выполняющиеся на обеих базах данных, при настройке нескольких баз данных с помощью symfony4 и doctrine - PullRequest
1 голос
/ 16 апреля 2019

Я пытаюсь настроить вторую базу данных для проекта Symfony 4.2.Кажется, что все работает нормально до того момента, когда я запускаю миграции, когда все миграции выполняются для данного соединения, а не только для тех соединений, для которых оно было создано.

Следуя собственной документации symfony овот так мой doctrine.yaml выглядит так:

doctrine:
    dbal:
        default_connection: default
        connections:
            default:
                driver: 'pdo_mysql'
                server_version: '5.7'
                charset: utf8mb4
                default_table_options:
                    charset: utf8mb4
                    collate: utf8mb4_unicode_ci
                url: '%env(DATABASE_URL)%'
            logging:
                driver: 'pdo_mysql'
                server_version: '5.7'
                charset: utf8mb4
                default_table_options:
                    charset: utf8mb4
                    collate: utf8mb4_unicode_ci
                url: '%env(DATABASE_URL_LOG)%'
    orm:
        auto_generate_proxy_classes: '%kernel.debug%'
        default_entity_manager: default
        entity_managers:
            default:
                connection: default
                naming_strategy: doctrine.orm.naming_strategy.underscore
                auto_mapping: true
                mappings:
                    App:
                        is_bundle: false
                        type: annotation
                        dir: '%kernel.project_dir%/src/Entity'
                        prefix: 'App\Entity'
                        alias: App
            logging:
                connection: logging
                naming_strategy: doctrine.orm.naming_strategy.underscore
                auto_mapping: false
                mappings:
                    Log:
                        is_bundle: false
                        type: annotation
                        dir: '%kernel.project_dir%/src/Log'
                        prefix: 'App\Log'
                        alias: Log

Теперь с этой конфигурацией я могу запускать команды миграции с параметром --em = log / default, например:

php bin/console doctrine:migrations:diff --em=log
php bin/console doctrine:migrations:migrate --em=log

И вы получите ожидаемые результаты: он создает новую миграцию только для новой сущности, которую я создал в src / Log, когда я добавляю --em = log.

это новая сущность:

<?php

namespace App\Log;

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity()
 */
class LogItem
{
    /**
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     * @ORM\Column(type="integer")
     */
    private $id;
}

Однако миграция создается в папке src / Migrations по умолчанию, и в результате:

1) эта миграция также выполняется при запуске doctrine:migrations:migrate --em=default (создание таблицы по умолчаниюбаза данных)

2) вся схема по умолчанию загружается в базу данных журнала при запуске doctrine:migrations:migrate --em=log

Так что я думаю, что решение будет разделить файлы миграции наанимация для менеджеров сущностей в разных каталогах.Но я тратил часы и не могу найти способ сделать это для symfony4.Кроме того, поскольку в документации Symfony абсолютно ничего не говорится об этом, я чувствую, что, возможно, что-то не так в том, как это происходит сейчас.

Так может кто-нибудь сказать мне, что я делаю здесь неправильно?Или можно (и если да: как) разделить файлы миграции, чтобы он выполнял только те миграции, которые созданы для данного менеджера сущностей?

...