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

Kar*_*lis 1 doctrine symfony doctrine-orm

我正在尝试创建一个自定义的 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';
    }
}

?>
Run Code Online (Sandbox Code Playgroud)

在 config.ymldoctrine部分:

dbal:
    types:
        binarystring: AppBundle\Doctrine\Type\BinaryStringType
Run Code Online (Sandbox Code Playgroud)

它(有点)有效,但是:php bin/console doctrine:schema:update无论数据库是否是最新的,运行ALWAYS 都会生成一个 ALTER TABLE 语句。

ALTER TABLE xxxx CHANGE column column VARBINARY(24) DEFAULT NULL;
Run Code Online (Sandbox Code Playgroud)

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

谢谢!

qoo*_*mao 8

您的问题是学说将您的字段重新定义为常规字符串类型而不是二进制字符串,因此它每次都试图对其进行转换。

如果加..

/**
 * {@inheritdoc}
 */
public function requiresSQLCommentHint(AbstractPlatform $platform)
{
    return true;
}
Run Code Online (Sandbox Code Playgroud)

.. 到你的类然后它会COMMENT \'(DC2Type:binarystring)\'在你的迁移中添加类似于alter table 调用的东西(以及对你的数据库的注释提示),以便它在未来被识别为你的字段类型。