@@ -19,7 +19,7 @@ final class EnumTool
19
19
*/
20
20
public static function getEnumTypeNameFromClassName (string $ className ): string
21
21
{
22
- self ::checkEnumExists ($ className );
22
+ self ::checkEnumExistsAndValid ($ className );
23
23
24
24
$ classNameParts = \explode ('\\' , $ className );
25
25
@@ -33,7 +33,7 @@ public static function getEnumTypeNameFromClassName(string $className): string
33
33
*/
34
34
public static function getEnumLabelsByClassName (string $ className ): array
35
35
{
36
- self ::checkEnumExists ($ className );
36
+ self ::checkEnumExistsAndValid ($ className );
37
37
38
38
return \array_map (
39
39
static function (mixed $ case ) {
@@ -50,18 +50,35 @@ static function (mixed $case) {
50
50
);
51
51
}
52
52
53
- private static function checkEnumExists (string $ className ): void
53
+ private static function checkEnumExistsAndValid (string $ className ): void
54
54
{
55
55
if (self ::$ checkMap [$ className ] ?? false ) {
56
56
return ;
57
57
}
58
58
59
- if (!\enum_exists ($ className ) && (!\class_exists ($ className ) || is_subclass_of ($ className , EnumInterface::class))) {
59
+ if (!\enum_exists ($ className ) && (!\class_exists ($ className ) || ! is_subclass_of ($ className , EnumInterface::class))) {
60
60
throw new InvalidArgumentException (
61
61
sprintf ('Invalid enum className specified: %s. Enum class has to be a php8 enum or implements %s ' , $ className , EnumInterface::class)
62
62
);
63
63
}
64
64
65
+ if (enum_exists ($ className ) && self ::isIntBackedEnum ($ className )) {
66
+ throw new InvalidArgumentException (
67
+ sprintf ('Invalid enum className specified: %s. PostgreSQL supports only string values for enums ' , $ className )
68
+ );
69
+ }
70
+
65
71
self ::$ checkMap [$ className ] = true ;
66
72
}
73
+
74
+ /**
75
+ * @param class-string<\UnitEnum> $className
76
+ * @return bool
77
+ */
78
+ private static function isIntBackedEnum (string $ className ): bool
79
+ {
80
+ $ fistCase = ($ className ::cases ()[0 ] ?? null );
81
+
82
+ return $ fistCase instanceof \BackedEnum && is_int ($ fistCase ->value );
83
+ }
67
84
}
0 commit comments