diff --git a/README.md b/README.md index 704d453..d2b37c0 100644 --- a/README.md +++ b/README.md @@ -65,7 +65,10 @@ There is only one function for Blueprint `enumeration` to create a column in tab ```php // Accepts PHP Enums and Strings -\Illuminate\Database\Schema\Blueprint::enumeration(string $name); +\Illuminate\Database\Schema\Blueprint::enumeration(string $name, string $type, ?array $options = null); + +// For Enum List e.g: SomeEnum[] +\Illuminate\Database\Schema\Blueprint::enumerations(string $name, string $type, ?array $options = null); ``` ### Full Migration Example @@ -79,7 +82,8 @@ public function up(): void Schema::createEnum(MyEnum::class); Schema::create('users', function(Blueprint $table) { $table->id(); - $table->enumeration(MyEnum::class); + $table->enumeration('my_enum_field', MyEnum::class); // Single Enum field + $table->enumerations('my_list', MyEnum::class); // Array of Enums field }); } diff --git a/composer.json b/composer.json index e7510d9..dee5c08 100644 --- a/composer.json +++ b/composer.json @@ -27,8 +27,8 @@ "require": { "php": ">=8.1", "ext-pdo": "*", - "illuminate/database": "^9|^10|^11", - "illuminate/support": "^9|^10|^11" + "illuminate/database": "^9|^10|^11|^12", + "illuminate/support": "^9|^10|^11|^12" }, "require-dev": { "laravel/pint": "^1.15", diff --git a/src/Mixins/BlueprintExtensions.php b/src/Mixins/BlueprintExtensions.php index 3c30f30..c48ee29 100644 --- a/src/Mixins/BlueprintExtensions.php +++ b/src/Mixins/BlueprintExtensions.php @@ -19,4 +19,15 @@ public function enumeration(): Closure ]); }; } + + public function enumerations(): Closure + { + return function (string $name, string $type, array $options = []) { + /** @var $this Blueprint */ + return $this->addColumn('enumerations', $name, [ + 'pg_enum' => $type, + ...$options, + ]); + }; + } } diff --git a/src/Mixins/GrammarExtensions.php b/src/Mixins/GrammarExtensions.php index 445d698..447c924 100644 --- a/src/Mixins/GrammarExtensions.php +++ b/src/Mixins/GrammarExtensions.php @@ -20,4 +20,14 @@ public function typeEnumeration(): Closure }; }; } + + public function typeEnumerations(): Closure + { + return function (ColumnDefinition $columnDefinition) { + return match (class_exists($name = $columnDefinition['pg_enum'])) { + true => Str::snake((new ReflectionEnum($name))->getShortName()) . '[]', + false => $name + }; + }; + } }