0

私は symfony 5.1、doctrine-bundle 2.1.2、および doctrine-migrations-bundle 2.2 を使用しています。私は ORM を使用しておらず、独自のスキーマを定義しています。列挙型を追加するには、次のコードを使用しています。

abstract class EnumType extends Type
{
    protected string $name;

    public function getSQLDeclaration(array $fieldDeclaration, AbstractPlatform $platform)
    {
        $values = $this->getValues();
        $maxLength = max(array_map('strlen', $values));
        $columnName = $fieldDeclaration['name'];

        $implodedValues = implode(', ', array_map(function($value) {return "'$value'";}, $values));

        if ($platform instanceof MySqlPlatform) {
            return "ENUM($implodedValues)";
        }

        if (
            $platform instanceof SQLServer2012Platform
            || $platform instanceof PostgreSQL94Platform
        ) {
            return "VARCHAR($maxLength) CHECK ({$columnName} IN ($implodedValues))";
        }

        if ($platform instanceof SqlitePlatform) {
            return "TEXT CHECK ({$columnName} IN ($implodedValues))";
        }

        throw DBALException::invalidPlatformType($platform);
    }

    public function convertToPHPValue($value, AbstractPlatform $platform)
    {
        return $value;
    }

    public function convertToDatabaseValue($value, AbstractPlatform $platform)
    {
        if (!in_array($value, $this->getValues())) {
            throw new \InvalidArgumentException("Invalid '" . $this->name . "' value: " . (string)$value);
        }
        return $value;
    }

    public function getName()
    {
        return $this->name;
    }

    public function requiresSQLCommentHint(AbstractPlatform $platform)
    {
        return true;
    }

    abstract function getValues(): array;
}

各列挙型は、この抽象クラスを拡張して値を設定します。

作成は問題ありません。migration diff コマンドを実行すると、次のエラー メッセージが表示されます。

不明なデータベース タイプの列挙型が要求されました。Doctrine\DBAL\Platforms\MySQL57Platform がサポートしていない可能性があります。

列挙型自体への変更も含む差分を作成する方法はありますか?

4

1 に答える 1