Symfony 该原则为枚举类型的实体生成不正确的差异
我为实体命令的属性类型执行了一个特殊的Symfony 该原则为枚举类型的实体生成不正确的差异,symfony,doctrine-orm,doctrine,Symfony,Doctrine Orm,Doctrine,我为实体命令的属性类型执行了一个特殊的ENUM类型 该属性看起来像这样: /** *@var命令类型 * *@ORM\Column(type=“command\u type”) */ 受保护的$类型; 这个片段描述了新的学说类型: final类CommandTypeType扩展了EnumerableType { 公共函数getSQLDeclaration(数组$fieldDeclaration,抽象平台$platform) { 返回“VARCHAR(30)”; } 公共函数getName():
ENUM
类型
该属性看起来像这样:
/**
*@var命令类型
*
*@ORM\Column(type=“command\u type”)
*/
受保护的$类型;
这个片段描述了新的学说类型:
final类CommandTypeType扩展了EnumerableType
{
公共函数getSQLDeclaration(数组$fieldDeclaration,抽象平台$platform)
{
返回“VARCHAR(30)”;
}
公共函数getName():字符串
{
返回“命令类型”;
}
受保护的函数getClassName():字符串
{
返回CommandType::class;
}
}
对于一个实体,在第一次运行命令
/bin/console原则:迁移:diff
之后,我得到了迁移,它看起来是正确的
最终类版本2020 072720500扩展了抽象迁移
{
公共函数启动(架构$Schema):无效
{
$this->addSql(“创建表命令(
id INT自动增量不为空,
名称VARCHAR(30)默认为空,
命令VARCHAR(100)默认为空,
类型varchar(30)不为空,
主键(id)
)默认字符集UTF8 COLLATE`UTF8\U unicode\U ci`ENGINE=InnoDB”);
}
公共函数关闭(架构$Schema):无效
{
$this->addSql('DROP TABLE commands');
}
}
下一步是运行命令
/bin/console原则:迁移:迁移
,它工作正常,创建了表
然后我再运行一次命令/bin/console-doctor:migrations:diff
,并获得新的迁移
最终类版本20200727205035扩展了抽象迁移
{
公共函数启动(架构$Schema):无效
{
$this->addSql('altertable命令更改类型VARCHAR(30)notnull');
}
公共函数关闭(架构$Schema):无效
{
$this->addSql('ALTER TABLE命令更改类型VARCHAR(30)字符集utf8 NOT NULL COLLATE`utf8\U unicode\U ci`);
}
}
我不知道第二个diff为什么会产生这种奇怪的迁移。 我做错了什么?
- Symfony 4.4
- 条令/条令迁移包3.0.1
- 条令/迁移3.0.1
requireSqlCommentHint
方法是否已实现,并返回true或将其添加到自定义类型中
final类CommandTypeType扩展了EnumerableType
{
...
公共函数requireSqlCommentHint(AbstractPlatform$platform):bool
{
返回true;
}
}
您应该会在下一次迁移时看到要添加到列中的注释,仅此而已。我向ENUM添加了一个新属性,并运行了
原则:迁移:diff
,但新的更改没有出现,也许您知道如何修复它吗?从ORM的角度来看,没有任何更改,您必须手动添加它以生成迁移。您总是可以尝试更改列属性(例如length),以使您认为某些内容已更改,但我不确定它是否有效。