Doctrine orm 新移民中的冗余变化

Doctrine orm 新移民中的冗余变化,doctrine-orm,migration,mariadb,symfony4,Doctrine Orm,Migration,Mariadb,Symfony4,每次创建新迁移时,都会有我想要的更改,但也有一些不应该出现的更改。它们在每次新迁移中都是相同的 因此,如果我创建一个新迁移而不做任何更改,那么只有那些不需要的更改才会出现。如果我运行迁移并创建一个新的迁移,这些更改仍将存在。我可能做错了什么,我想“清理”,以停止每次手动删除这些更改 我正在MariaDB 10.3.14上运行Symfony 4.2.3和Doctrine ORM v2.6.3的项目 这是一个应该为空的迁移: 最终类版本20190412133855扩展了抽象迁移 { // ... 公

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

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

我正在MariaDB 10.3.14上运行Symfony 4.2.3和Doctrine ORM v2.6.3的项目

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

最终类版本20190412133855扩展了抽象迁移
{
// ...
公共函数启动(架构$Schema):无效
{
//此up()迁移是自动生成的,请根据需要进行修改
$this->abortf($this->connection->getDatabasePlatform()->getName()!='mysql',迁移只能在'mysql\'上安全执行);
$this->addSql('ALTER TABLE player CHANGE race\u id race\u id INT DEFAULT NULL,CHANGE team\u id team\u id INT DEFAULT NULL,CHANGE country\u id country\u id INT DEFAULT NULL,CHANGE birthdate birthdate 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 VARCHAR(255)DEFAULT NULL,CHANGE coach coach VARCHAR(255)DEFAULT NULL,CHANGE 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为idx_232B318C53C55F64');
}
公共函数关闭(架构$Schema):无效
{
//此down()迁移是自动生成的,请根据需要进行修改
$this->abortf($this->connection->getDatabasePlatform()->getName()!='mysql',迁移只能在'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改为idx_7A5BC5055C55F64');
$this->addSql('ALTER TABLE map CHANGE tileset_id tileset_id INT DEFAULT NULL');
$this->addSql('ALTER TABLE player CHANGE race\u id race\u id INT DEFAULT NULL,CHANGE team\u id team\u id INT DEFAULT NULL,CHANGE country\u id country\u id INT DEFAULT NULL,CHANGE birthdate birthdate DEFAULT'NULL\');
$this->addSql('ALTER TABLE team CHANGE country\u id country\u id INT DEFAULT NULL,CHANGE manager manager VARCHAR(255)DEFAULT'NULL\'整理utf8mb4\u unicode\u ci,CHANGE coach VARCHAR(255)DEFAULT'NULL\'整理utf8mb4\u unicode\u ci,CHANGE website VARCHAR(255)DEFAULT'NULL\'整理utf8mb4\u unicode\u ci');
}
}
所有这些“更改”实际上都已经在数据库中完成了。 还有一个小问题:生成的查询
将表游戏重命名索引idx_7a5bc50553c5f64为idx_232B318C53C55F64
,这对MariaDB无效。如果我不删除这个查询,我将得到一个语法错误。 就像我说的:如果我删除这个,迁移将毫无问题地运行,但是如果我创建一个新的迁移,同样的新迁移将出现

在具有相同配置的其他项目中,如果我进行了新迁移而没有任何更改,则会得到预期的
[警告]未检测到任何数据库更改。
。如果我做一个改变,我就会得到我想要的改变。 我可能在实体中的注释中做了一些错误的事情,所以在这种情况下,这里有一个模型(播放器):

感谢您的帮助

感谢@rkeet:

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

然后,对于MariaDB上的
重命名索引
语法错误案例,我在条令配置中更改了服务器版本(在我的案例中是在条令.yaml中)
server\u版本:'5.7'
server\u版本:mariadb-10.3.14
(使用
mysql--version
检查当前的mariadb版本)。

如果运行
php-bin/console-doc:sch:val
,是否会收到两条“OK”消息?如果第一个是确定的,那么您的实体是好的。如果第二个选项为“OK”,则数据库与实体配置同步。如果后者不同步,您将得到迁移…手动检查一下,您应该发现这些更改实际上是必要的,以便使数据库与您的业务模型(实体)的更改保持一致。但是请注意,由于更新(例如DoctrineModule),可能会发生一些变化,想想在过去的两个月里,有一次更新使所有索引id字母大写,这也会重新计算散列,例如:
将索引idx_7a5bc5055f64重命名为idx_232B318C53C55F64
,读这段:确保你读到了最后一行;-)可能会有帮助(也可能不会,但不会有伤害):
如果您正在运行一个MariaDB数据库,您应该在服务器版本前面加上MariaDB-(例如:MariaDB-10.2.12)。
事实上,现在它可以工作了!应该少读谷歌,多读官方文档。非常感谢你的帮助!一切都好,享受吧。一定要贴出一个小的答案,告诉你是什么解决了这个问题,并在可能的时候接受它;)