bestsource

새로운 마이그레이션의 중복된 변경 사항

bestsource 2023. 6. 23. 22:20
반응형

새로운 마이그레이션의 중복된 변경 사항

새 마이그레이션을 만들 때마다 원하는 변경 사항이 있지만 변경 사항이 있어서는 안 되는 변경 사항도 있습니다.이들은 각각의 새로운 마이그레이션에서 동일합니다.

따라서 변경 사항 없이 새 마이그레이션을 생성하면 바람직하지 않은 변경 사항만 있을 것입니다.마이그레이션을 실행하고 새 마이그레이션을 생성해도 변경 사항은 그대로 유지됩니다.제가 뭔가 잘못한 것 같습니다. 매번 수동으로 변경 사항을 삭제하지 않도록 "정리"하고 싶습니다.

저는 Symfony 4.2.3을 실행하는 프로젝트에 참여하고 있습니다. Dunction 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_232B318C53C55F64MariaDB에는 유효하지 않습니다.이 쿼리를 삭제하지 않으면 구문 오류가 발생합니다.그리고 앞서 말했듯이, 이 마이그레이션을 삭제하면 마이그레이션이 문제없이 실행되지만 새 마이그레이션을 생성하면 동일한 새 마이그레이션이 나타납니다.

동일한 구성을 가진 다른 프로젝트에서 변경 없이 새 마이그레이션을 수행하면 예상되는 작업이 발생합니다.[WARNING] No database changes were detected.한 번만 변경하면 원하는 대로 변경할 수 있습니다.제가 제 엔티티의 주석에서 잘못된 것을 했을 수도 있으므로, 만약을 위해, 여기 모델(플레이어) 중 하나가 있습니다: https://pastebin.com/1mUPP3i3

도와주셔서 고마워요.

@rkeet 덕분에:

나는 매핑과 데이터베이스에 어떤 문제가 있는지 명령으로 확인했습니다.doc:sch:val.

그럼.RENAME INDEXMariaDB의 구문 오류 사례, 나는 Dutrin Configuration(나의 경우 Dutrin.yaml)에서 서버 버전을 변경했습니다.server_version: '5.7'로.server_version: mariadb-10.3.14(현재 mariadb 버전을 확인합니다.)mysql --version).

언급URL : https://stackoverflow.com/questions/55653372/redundant-changes-in-new-migration

반응형