2016-02-25 57 views
1

我试图创建一个自定义映射学说类型,按: 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

你是什么意思生成一个'ALTER TABLE'语句,它生成的确切语句是什么? –

+0

@JasonRoman在问题中添加了“alter table”语句。 – Karolis

回答

3

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

如果添加..

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

..你的课,然后它会添加类似COMMENT \'(DC2Type:binarystring)\'在迁移的ALTER TABLE调用(和注释提示您DB),所以它被认为是将来您的字段类型。