更改主义自定义类型后更新Symfony模式

时间:2018-07-06 16:49:05

标签: symfony doctrine-orm

代码

我使用自定义学说类型,以便使用MySQL {ish)set使用字段:

final class GenreSetType extends Doctrine\DBAL\Types\Type
{

    private const TYPE_NAME = "genreSet";

    public static $genres = [
        "techno",
        "dubstep",
        "drumandbass",
        "psytrance",
    ];

    // [...]

    /**
     * @inheritdoc
     */
    public function getSQLDeclaration(array $fieldDeclaration, AbstractPlatform $platform): string
    {
        $genreSet = array_map(
            function ($genre) {
                return "'$genre'";
            },
            self::$genres
        );
        $genreSet = implode(", ", $genreSet);
        $genreSet = sprintf("SET(%s)", $genreSet);

        return $genreSet;
    }

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

问题

它按预期工作。但是,当我扩展流派的数组时,这种学说模式验证程序不会接受这种更改。这意味着doctrine:schema:validatedoctrine:schema:updatedoctrine:migration:diff都不会看到更改。

容易出错的解决方案

如果我手动删除(DC2Type:genreSet)并运行这两个命令中的任何一个,它们确实可以正确提取更改并创建相应的SQL查询。 不幸的是,我将不得不使用此自定义字段从任何实体中手动删除评论。

问题

  • 是否有(更好的)方法来使自定义字段类型无效,或使symfony采取其他任何方式进行更改并采取相应的行动?
  • 或者有完全不同的方式来处理带有symfony中的学说的MySQL集吗?

0 个答案:

没有答案