新迁移的冗余变化

问题描述 投票:0回答:1

每次我创建一个新的迁移时,都会有我想要的更改,但也有一些不应该存在的更改。它们在每次新迁移中都是相同的。

因此,如果我创建一个没有任何更改的新迁移,那么只会有那些不需要的更改。如果我运行迁移并创建一个新的迁移,那么这些更改仍将在此处。我可能做错了什么,我想“清理”,以便每次都手动停止删除这些更改。

我正在一个项目中使用Doctrine ORM v2.6.3在MariaDB 10.3.14上运行Symfony 4.2.3。

所以这是一个应该为空的迁移:

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

谢谢你的帮助

doctrine-orm migration mariadb symfony4
1个回答
1
投票

感谢@rkeet:

我用命令doc:sch:val检查了映射和数据库的错误。

然后,对于MariaDB上的RENAME INDEX语法错误案例,我更改了Doctrine配置中的服务器版本(在我的案例中为Doctrine.yaml)从server_version: '5.7'server_version: mariadb-10.3.14(使用mysql --version检查当前的mariadb版本)。

© www.soinside.com 2019 - 2024. All rights reserved.