我正在尝试创建自定义Doctrine映射类型,如下所示: http://doctrine-orm.readthedocs.org/projects/doctrine-dbal/en/latest/reference/types.html#custom-mapping-types
我的课程如下:
<?php
namespace AppBundle\Doctrine\Type;
use Doctrine\DBAL\Types\Type;
use Doctrine\DBAL\Platforms\AbstractPlatform;
/**
* My custom datatype.
*/
class BinaryStringType extends Type
{
public function getSQLDeclaration(array $fieldDeclaration, AbstractPlatform $platform)
{
return $platform->getBinaryTypeDeclarationSQL($fieldDeclaration);
}
public function getDefaultLength(AbstractPlatform $platform)
{
return $platform->getVarcharDefaultLength();
}
public function getName()
{
return 'binarystring';
}
}
?>
在config.yml doctrine
部分:
dbal:
types:
binarystring: AppBundle\Doctrine\Type\BinaryStringType
它(种类)有效,但是:运行php bin/console doctrine:schema:update
始终生成ALTER TABLE语句,无论数据库是否是最新的。
ALTER TABLE xxxx CHANGE column column VARBINARY(24) DEFAULT NULL;
任何想法如何解决这个问题?
谢谢!
答案 0 :(得分:4)
你的问题是,学说是将你的字段重新标记为常规字符串类型而不是二进制字符串,所以它每次都试图转换它。
如果你添加..
/**
* {@inheritdoc}
*/
public function requiresSQLCommentHint(AbstractPlatform $platform)
{
return true;
}
..然后它会在您的迁移中向alter table调用添加类似COMMENT \'(DC2Type:binarystring)\'
的内容(以及对您的数据库的注释提示),以便将来将其识别为您的字段类型。