Доктрина миграции всегда добавляет одинаковые запросы - PullRequest
1 голос
/ 19 марта 2019

У меня некоторое время была проблема с Doctrine Migrations. Несколько недель назад я думал, что исправил проблему, удалив все файлы миграции, и вместо этого сделал один большой чистый diff. Но, похоже, проблема вернулась.

Примечание: я уже проверил версию сервера

Итак, у меня есть эта таблица, созданная в моем большом файле миграции

    CREATE TABLE hour_synthesis
    (
      id             INT          NOT NULL,
      fiscal_year_id INT DEFAULT NULL,
      month          VARCHAR(255) NOT NULL,
      year           VARCHAR(255) NOT NULL,
      worked_days    VARCHAR(255) NOT NULL,
      hours_to_sell  VARCHAR(255) NOT NULL,
      adapted_hours  VARCHAR(255) NOT NULL,
      percentage     NUMERIC(5, 2) DEFAULT '100' NOT NULL,
      PRIMARY KEY (id)
    )

Как вы можете видеть здесь, в поле percentage есть все необходимое, но если я когда-нибудь начну diff ...

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

        $this->addSql('ALTER TABLE hour_synthesis ALTER percentage TYPE NUMERIC(5, 2)');
        $this->addSql('ALTER TABLE hour_synthesis ALTER percentage SET DEFAULT \'100\'');
        $this->addSql('ALTER TABLE hour_synthesis ALTER percentage SET NOT NULL');
        $this->addSql('ALTER TABLE hour_synthesis ALTER percentage DROP DEFAULT');
        $this->addSql('ALTER TABLE hour_synthesis ALTER percentage TYPE NUMERIC(5, 2)');
        $this->addSql('COMMENT ON COLUMN hour_synthesis.percentage IS NULL');
        $this->addSql('ALTER TABLE product ALTER stock_management SET DEFAULT \'false\'');
    }

Обратите внимание, что миграция устанавливает тип, устанавливает значение по умолчанию, устанавливает не нуль, отбрасывает установленное значение по умолчанию, снова устанавливает тип и комментирует с IS NULL. (Последняя строка не связана, но это еще один из этих артефактов миграции)

Конечно, если я выполню эту миграцию, она будет работать, но следующий diff принесет точно такой же код. Я попытался удалить некоторые строки, например DROP DEFAULT, чтобы на самом деле было установлено значение по умолчанию. Но опять же, следующий diff точно такой же.

Я попытался обновить мою схему, чтобы увидеть, что я мог видеть ... Угадайте, что?

$ db d:s:u --dump-sql

 The following SQL statements will be executed:

     ALTER TABLE hour_synthesis ALTER percentage TYPE NUMERIC(5, 2);
     ALTER TABLE hour_synthesis ALTER percentage SET DEFAULT '100';
     ALTER TABLE hour_synthesis ALTER percentage SET NOT NULL;
     ALTER TABLE hour_synthesis ALTER percentage DROP DEFAULT;
     ALTER TABLE hour_synthesis ALTER percentage TYPE NUMERIC(5, 2);
     COMMENT ON COLUMN hour_synthesis.percentage IS NULL;
     ALTER TABLE product ALTER stock_management SET DEFAULT 'false';

(db мой псевдоним докера)

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

...