2016-02-25 43 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),所以它被認爲是將來您的字段類型。