该条令对ENUM类型的实体进行了不正确的区分



我为实体Command的属性type编写了一个特殊的ENUM类型。


属性如下:

/**
* @var CommandType
*
* @ORMColumn(type="command_type")
*/
protected $type;


这个片段描述了条令的新类型:

final class CommandTypeType extends EnumerableType
{
public function getSQLDeclaration(array $fieldDeclaration, AbstractPlatform $platform)
{
return 'VARCHAR(30)';
}
public function getName(): string
{
return 'command_type';
}
protected function getClassName(): string
{
return CommandType::class;
}
}


在第一次为实体运行命令/bin/console doctrine:migrations:diff后,我得到了迁移,它看起来是正确的

final class Version2020 072720500 extends AbstractMigration
{
public function up(Schema $schema) : void
{
$this->addSql("CREATE TABLE commands (
id INT AUTO_INCREMENT NOT NULL,
name VARCHAR(30) DEFAULT NULL,
command VARCHAR(100) DEFAULT NULL,
type varchar(30) NOT NULL,
PRIMARY KEY(id)
) DEFAULT CHARACTER SET UTF8 COLLATE `UTF8_unicode_ci` ENGINE = InnoDB");
}
public function down(Schema $schema) : void
{
$this->addSql('DROP TABLE commands');
}
}


下一步是运行命令/bin/console doctrine:migrations:migrate,它工作正常,创建了表。

然后我再次运行命令/bin/console doctrine:migrations:diff并获得新的迁移

final class Version20200727205035 extends AbstractMigration
{
public function up(Schema $schema) : void
{
$this->addSql('ALTER TABLE commands CHANGE type type VARCHAR(30) NOT NULL');
}
public function down(Schema $schema) : void
{
$this->addSql('ALTER TABLE commands CHANGE type type VARCHAR(30) CHARACTER SET utf8 NOT NULL COLLATE `utf8_unicode_ci`');
}
}


我不知道为什么第二个diff会产生这种奇怪的迁移。我做错了什么

  • Symfony 4.4
  • 条令/条令迁移捆绑包3.0.1
  • 条令/迁移3.0.1

Doctrine需要在列中添加注释,以检测自定义类型是否已应用于列。

检查requiresSQLCommentHint方法是否已实现并返回true,或者将其添加到自定义类型中。

final class CommandTypeType extends EnumerableType
{
...
public function requiresSQLCommentHint(AbstractPlatform $platform): bool
{
return true;
}
}

您应该看到一条关于下一次迁移的注释,而不是其他内容。

相关内容

  • 没有找到相关文章

最新更新