Избыточные изменения в новой миграции - PullRequest
1 голос
/ 12 апреля 2019

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

Так что, если я создам новую миграцию без каких-либо изменений, будут присутствовать только те нежелательные изменения.Если я запусту миграцию и сделаю новую, эти изменения все еще будут здесь.Возможно, я сделал что-то не так, я бы хотел «почистить», чтобы перестать каждый раз удалять эти изменения вручную.

Я нахожусь в проекте под управлением Symfony 4.2.3 с Doctrine ORM v2.6.3,на MariaDB 10.3.14.

Итак, вот миграция, которая должна быть пустой:

final class Version20190412133855 extends AbstractMigration
{
    // ...

    public function up(Schema $schema) : void
    {
        // this up() migration is auto-generated, please modify it to your needs
        $this->abortIf($this->connection->getDatabasePlatform()->getName() !== 'mysql', 'Migration can only be executed safely on \'mysql\'.');

        $this->addSql('ALTER TABLE player CHANGE race_id race_id INT DEFAULT NULL, CHANGE team_id team_id INT DEFAULT NULL, CHANGE country_id country_id INT DEFAULT NULL, CHANGE birthdate birthdate DATE DEFAULT NULL');
        $this->addSql('ALTER TABLE clan_war CHANGE winner_id winner_id INT DEFAULT NULL');
        $this->addSql('ALTER TABLE team CHANGE country_id country_id INT DEFAULT NULL, CHANGE manager manager VARCHAR(255) DEFAULT NULL, CHANGE coach coach VARCHAR(255) DEFAULT NULL, CHANGE website website VARCHAR(255) DEFAULT NULL');
        $this->addSql('ALTER TABLE map CHANGE tileset_id tileset_id INT DEFAULT NULL');
        $this->addSql('ALTER TABLE game CHANGE map_id map_id INT DEFAULT NULL, CHANGE winner_id winner_id INT DEFAULT NULL');
        $this->addSql('ALTER TABLE game RENAME INDEX idx_7a5bc50553c55f64 TO IDX_232B318C53C55F64');
    }

    public function down(Schema $schema) : void
    {
        // this down() migration is auto-generated, please modify it to your needs
        $this->abortIf($this->connection->getDatabasePlatform()->getName() !== 'mysql', 'Migration can only be executed safely on \'mysql\'.');

        $this->addSql('ALTER TABLE clan_war CHANGE winner_id winner_id INT DEFAULT NULL');
        $this->addSql('ALTER TABLE game CHANGE map_id map_id INT DEFAULT NULL, CHANGE winner_id winner_id INT DEFAULT NULL');
        $this->addSql('ALTER TABLE game RENAME INDEX idx_232b318c53c55f64 TO IDX_7A5BC50553C55F64');
        $this->addSql('ALTER TABLE map CHANGE tileset_id tileset_id INT DEFAULT NULL');
        $this->addSql('ALTER TABLE player CHANGE race_id race_id INT DEFAULT NULL, CHANGE team_id team_id INT DEFAULT NULL, CHANGE country_id country_id INT DEFAULT NULL, CHANGE birthdate birthdate DATE DEFAULT \'NULL\'');
        $this->addSql('ALTER TABLE team CHANGE country_id country_id INT DEFAULT NULL, CHANGE manager manager VARCHAR(255) DEFAULT \'NULL\' COLLATE utf8mb4_unicode_ci, CHANGE coach coach VARCHAR(255) DEFAULT \'NULL\' COLLATE utf8mb4_unicode_ci, CHANGE website website VARCHAR(255) DEFAULT \'NULL\' COLLATE utf8mb4_unicode_ci');
    }
}

Все эти «изменения» фактически уже внесены в базу данных.Есть еще одна небольшая проблема: сгенерированный запрос ALTER TABLE game RENAME INDEX idx_7a5bc50553c55f64 TO IDX_232B318C53C55F64, который недопустим для MariaDB.Если я не удаляю этот запрос, я получу синтаксическую ошибку.И, как я уже сказал: если я удалю этот, миграция будет выполняться без проблем, но такая же новая миграция появится, если я создам новый.

В другом проекте с той же конфигурацией, если ясделать новую миграцию без каких-либо изменений, я получаю ожидаемый [WARNING] No database changes were detected..Если я сделаю одно изменение, я получу только то, что хочу.Возможно, я сделал что-то не так в аннотациях в моих сущностях, так что на всякий случай вот одна из моделей (игрок): https://pastebin.com/1mUPP3i3

Спасибо за вашу помощь

1 Ответ

1 голос
/ 16 апреля 2019

Благодаря @rkeet:

Я проверил, что было не так с Mapping и базой данных с помощью команды doc:sch:val.

Затем для случая синтаксической ошибки RENAME INDEX на MariaDB,Я изменил версию сервера в конфигурации Doctrine (в моем случае в Doctrine.yaml) со server_version: '5.7' на server_version: mariadb-10.3.14 (проверьте текущую версию mariadb с mysql --version).

...