Doctrine自定义映射类型架构更新

时间:2016-02-25 21:15:39

标签: symfony doctrine-orm doctrine

我正在尝试创建自定义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;

任何想法如何解决这个问题?

谢谢!

1 个答案:

答案 0 :(得分:4)

你的问题是,学说是将你的字段重新标记为常规字符串类型而不是二进制字符串,所以它每次都试图转换它。

如果你添加..

/**
 * {@inheritdoc}
 */
public function requiresSQLCommentHint(AbstractPlatform $platform)
{
    return true;
}

..然后它会在您的迁移中向alter table调用添加类似COMMENT \'(DC2Type:binarystring)\'的内容(以及对您的数据库的注释提示),以便将来将其识别为您的字段类型。