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

Posted

技术标签:

【中文标题】教义自定义映射类型架构更新【英文标题】:Doctrine custom mapping type schema update 【发布时间】:2016-02-25 21:15:38 【问题描述】:

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

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

谢谢!

【问题讨论】:

生成ALTER TABLE 语句是什么意思,它生成的确切语句是什么? @JasonRoman 在问题中添加了alter table 语句。 【参考方案1】:

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

如果你添加..

/**
 * @inheritdoc
 */
public function requiresSQLCommentHint(AbstractPlatform $platform)

    return true;

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

【讨论】:

以上是关于教义自定义映射类型架构更新的主要内容,如果未能解决你的问题,请参考以下文章

架构师成长记_第八周_05_mappings 自定义创建映射

使用自定义 Doctrine 2 数据类型的依赖注入

如何手动将 apollo 自定义标量映射到客户端类型

教义自定义存储库方法和非托管实体

教义自引用关联映射(Symfony)

如何在 symfony 2 和教义 2 中自定义 sql 日志?