Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Symfony 该原则为枚举类型的实体生成不正确的差异_Symfony_Doctrine Orm_Doctrine - Fatal编程技术网

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),以使您认为某些内容已更改,但我不确定它是否有效。