新迁移中的冗余更改
Redundant changes in new migration
我每次创建一个新的migration,都有我想要的变化,但也有一些不应该有的变化。它们在每次新迁移中都是相同的。
因此,如果我创建一个没有任何更改的新迁移,那么只会有那些不需要的更改。如果我 运行 迁移并进行新的迁移,那些更改将仍然存在。我可能做错了什么,我想 "clean",以停止每次手动删除这些更改。
我在一个项目中 运行在 MariaDB 10.3.14 上使用 Doctrine ORM v2.6.3 宁 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');
}
}
所有这些 "changes" 实际上已经在数据库中完成了。
还有一个小问题:生成的查询 ALTER TABLE game RENAME INDEX idx_7a5bc50553c55f64 TO IDX_232B318C53C55F64
对 MariaDB 无效。如果我不删除这个查询,我会得到一个语法错误。
就像我说的:如果我删除这个,迁移将 运行 没有任何问题,但如果我创建一个新迁移,则会出现相同的新迁移。
在另一个具有相同配置的项目中,如果我进行新的迁移而不做任何更改,我会得到一个预期的 [WARNING] No database changes were detected.
。如果我做了一个改变,我就会得到我想要的改变。
我可能在我的实体的注释中做错了什么,所以以防万一,这是其中一个模型(播放器):https://pastebin.com/1mUPP3i3
感谢您的帮助
感谢@rkeet:
我用命令doc:sch:val
检查了映射和数据库有什么问题。
然后对于 MariaDB 上的 RENAME INDEX
语法错误情况,我在 Doctrine 配置中更改了服务器版本(在我的例子中是 Doctrine.yaml)
从 server_version: '5.7'
到 server_version: mariadb-10.3.14
(使用 mysql --version
检查您当前的 mariadb 版本)。
我每次创建一个新的migration,都有我想要的变化,但也有一些不应该有的变化。它们在每次新迁移中都是相同的。
因此,如果我创建一个没有任何更改的新迁移,那么只会有那些不需要的更改。如果我 运行 迁移并进行新的迁移,那些更改将仍然存在。我可能做错了什么,我想 "clean",以停止每次手动删除这些更改。
我在一个项目中 运行在 MariaDB 10.3.14 上使用 Doctrine ORM v2.6.3 宁 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');
}
}
所有这些 "changes" 实际上已经在数据库中完成了。
还有一个小问题:生成的查询 ALTER TABLE game RENAME INDEX idx_7a5bc50553c55f64 TO IDX_232B318C53C55F64
对 MariaDB 无效。如果我不删除这个查询,我会得到一个语法错误。
就像我说的:如果我删除这个,迁移将 运行 没有任何问题,但如果我创建一个新迁移,则会出现相同的新迁移。
在另一个具有相同配置的项目中,如果我进行新的迁移而不做任何更改,我会得到一个预期的 [WARNING] No database changes were detected.
。如果我做了一个改变,我就会得到我想要的改变。
我可能在我的实体的注释中做错了什么,所以以防万一,这是其中一个模型(播放器):https://pastebin.com/1mUPP3i3
感谢您的帮助
感谢@rkeet:
我用命令doc:sch:val
检查了映射和数据库有什么问题。
然后对于 MariaDB 上的 RENAME INDEX
语法错误情况,我在 Doctrine 配置中更改了服务器版本(在我的例子中是 Doctrine.yaml)
从 server_version: '5.7'
到 server_version: mariadb-10.3.14
(使用 mysql --version
检查您当前的 mariadb 版本)。