diff --git a/src/Command/ModelCommand.php b/src/Command/ModelCommand.php index afcf486d..423f088e 100644 --- a/src/Command/ModelCommand.php +++ b/src/Command/ModelCommand.php @@ -1476,11 +1476,11 @@ protected function getEnumDefinitions(TableSchemaInterface $schema): array continue; } - if (empty($columnSchema['comment']) || strpos($columnSchema['comment'], '[enum]') === false) { + if (empty($columnSchema['comment']) || !str_contains($columnSchema['comment'], '[enum]')) { continue; } - $enumsDefinitionString = trim(mb_substr($columnSchema['comment'], strpos($columnSchema['comment'], '[enum]') + 6)); + $enumsDefinitionString = EnumParser::parseDefinitionString($columnSchema['comment']); $isInt = in_array($columnSchema['type'], ['integer', 'tinyinteger', 'smallinteger'], true); if (str_starts_with($columnSchema['type'], 'enum-')) { $dbType = TypeFactory::build($columnSchema['type']); diff --git a/src/Utility/Model/EnumParser.php b/src/Utility/Model/EnumParser.php index df3ed5dc..9b888440 100644 --- a/src/Utility/Model/EnumParser.php +++ b/src/Utility/Model/EnumParser.php @@ -42,4 +42,20 @@ public static function parseCases(?string $casesString, bool $int): array return $definition; } + + /** + * Parses an enum definition from a DB column comment. + * + * @param string $comment + * @return string + */ + public static function parseDefinitionString(string $comment): string + { + $string = trim(mb_substr($comment, strpos($comment, '[enum]') + 6)); + if (str_contains($string, ';')) { + $string = trim(mb_substr($string, 0, strpos($string, ';'))); + } + + return $string; + } } diff --git a/tests/TestCase/Utility/Model/EnumParserTest.php b/tests/TestCase/Utility/Model/EnumParserTest.php index bff2c71c..6443c7de 100644 --- a/tests/TestCase/Utility/Model/EnumParserTest.php +++ b/tests/TestCase/Utility/Model/EnumParserTest.php @@ -24,6 +24,21 @@ */ class EnumParserTest extends TestCase { + /** + * @return void + */ + public function testParseDefinitionString(): void + { + $definitionString = EnumParser::parseDefinitionString('[enum]'); + $this->assertSame('', $definitionString); + + $definitionString = EnumParser::parseDefinitionString('[enum] foo, bar'); + $this->assertSame('foo, bar', $definitionString); + + $definitionString = EnumParser::parseDefinitionString('[enum] foo, bar; Some additional comment'); + $this->assertSame('foo, bar', $definitionString); + } + /** * @return void */