ridtichai / laravel-existing-db-migration-generator
Generate Laravel migration and seeder files from an existing database schema.
Package info
github.com/ridtichai/laravel-existing-db-migration-generator
pkg:composer/ridtichai/laravel-existing-db-migration-generator
Requires
- php: ^7.4 || ^8.0 || ^8.1 || ^8.2 || ^8.3
- doctrine/dbal: ^3.7 || ^4.0
- illuminate/console: ^8.75 || ^9.0 || ^10.0 || ^11.0 || ^12.0
- illuminate/database: ^8.75 || ^9.0 || ^10.0 || ^11.0 || ^12.0
- illuminate/support: ^8.75 || ^9.0 || ^10.0 || ^11.0 || ^12.0
README
Generate Laravel migration and seeder files from an existing database schema.
🚀 Features
🧱 Migration Generator
-
Generate migration files from existing database tables
-
Convert schema into Laravel-friendly syntax:
$table->id()$table->timestamps()$table->foreignId()->constrained()
-
Support Laravel 8.75+
-
Support PHP 7.4 and PHP 8+
-
Works with MySQL, MariaDB, PostgreSQL, SQLite
🌱 Seeder Generator
-
Export table data into Laravel seeders
-
Support:
--allgenerate all tables- auto sort by foreign key dependency
- auto register into
DatabaseSeeder - auto create
DatabaseSeederif not exists --truncateordelete()option- chunk insert for large data
- multi-file seeder for big tables
🧩 CRUD Generator
- Generate CRUD controller and Blade views from existing database tables
- Use Eloquent Model instead of Query Builder
- Use Bootstrap 5.2.3 as the default UI base
- Read column comments in format
label#input_type - Support configurable Blade parent path
- Support configurable default Bootstrap form columns
📦 Installation
composer require ridtichai/laravel-existing-db-migration-generator
⚙️ Migration Usage
php artisan existing-db:generate-migrations
Options
| Option | Description |
|---|---|
--connection= |
Database connection |
--path= |
Output path |
--table= |
Specific tables |
--ignore= |
Ignore tables |
🌱 Seeder Usage
Generate specific table
php artisan existing-db:generate-seeders --table=config_system
Generate multiple tables
php artisan existing-db:generate-seeders --table=users --table=roles
Generate all tables (🔥 recommended)
php artisan existing-db:generate-seeders --all
With truncate
php artisan existing-db:generate-seeders --all --truncate
Force overwrite
php artisan existing-db:generate-seeders --all --force
Disable auto register
php artisan existing-db:generate-seeders --all --no-register
🧠 Smart Features
🔗 Auto Sort by Foreign Key
Tables will be generated in correct order:
payment_status → payments → logs
📦 Multi-file Seeder
Large tables will be split automatically:
UsersTableSeederPart1
UsersTableSeederPart2
UsersTableSeederPart3
🧩 Auto Register Seeder
Generated seeders will be automatically added to:
DatabaseSeeder.php
🛠 Auto Create DatabaseSeeder
If not exists:
database/seeders/DatabaseSeeder.php
Will be generated automatically.
🧩 CRUD Usage
Generate CRUD from an existing table:
php artisan existing-db:generate-crud --table=users --path=pages/admin
Force overwrite existing files:
php artisan existing-db:generate-crud --table=users --force
Specify database connection:
php artisan existing-db:generate-crud --connection=mysql --table=users
📁 CRUD Generated Files
For:
php artisan existing-db:generate-crud --table=users
the package generates files like:
app/Http/Controllers/UserController.php resources/views/users/index.blade.php resources/views/users/create.blade.php resources/views/users/edit.blade.php resources/views/users/_form.blade.php
If view_parent_path is configured, the views will be generated inside that path.
--path=pages/admin
Generated views:
resources/views/pages/admin/users/index.blade.php resources/views/pages/admin/users/create.blade.php resources/views/pages/admin/users/edit.blade.php resources/views/pages/admin/users/_form.blade.php
✅ Supported Input Types
Supported input types in column comments:
- text
- textarea
- number
- password
- date
- datetime
- datetime-local
- time
- select
- radio
- checkbox
- file
- hidden
Example:
ชื่อ#text รายละเอียด#textarea จำนวน#number อีเมล#email รหัสผ่าน#password สถานะ#select
🔧 Configuration
Publish config:
php artisan vendor:publish --tag=existing-db-migration-generator-config
Example:
return [ 'default_output_path' => 'database/migrations', 'default_seeder_output_path' => 'database/seeders', 'exclude_tables' => [ 'migrations', 'password_resets', 'failed_jobs', 'personal_access_tokens', ], 'crud' => [ 'layout' => 'layouts.index', 'form_columns' => 2, 'model_namespace' => 'App\\Models', 'controller_namespace' => 'App\\Http\\Controllers', ], /* |-------------------------------------------------------------------------- | Laravel Style Macros |-------------------------------------------------------------------------- | | When enabled, the generator will try to output Laravel-style shortcuts: | - $table->id() | - $table->timestamps() | - $table->foreignId(...)->constrained(...) | | When disabled, the generator will stay closer to the original schema. | */ 'use_laravel_style_macros' => true, 'omit_default_string_length' => true, 'auto_register_seeder' => true, 'multi_file_seed_threshold' => 1000, ];
📁 Example Output
Seeder
DB::table('config_system')->insert([ [ 'id' => 1, 'name' => 'Example', 'created_at' => null, ], ]);
⚠️ Limitations
- Complex foreign keys (composite) not fully supported
- Some database-specific types may need manual adjustment
truncate()may fail with strict FK constraints
🧪 Compatibility
| Laravel | PHP |
|---|---|
| 8.75+ | 7.4 - 8.2+ |
📌 Roadmap
- Index support
- Unique & composite key support
- Disable/enable foreign key checks option
- Data-only / schema-only mode
- Seeder rollback support
🤝 Contributing
Pull requests are welcome!
📄 License
MIT License
Changelog
v0.2.0
- Add seeder generator
- Add --all option
- Auto sort by foreign key dependency
- Auto register DatabaseSeeder
- Multi-file seed support
- Truncate option
v0.2.6
-
Added existing-db:generate-crud command
-
Generate CRUD from existing database tables
-
Generate Eloquent-based controller
-
Generate Blade views:
-
index.blade.php
-
create.blade.php
-
edit.blade.php
-
_form.blade.php
-
Support column comment format label#input_type
-
Support foreign key select field generation
-
Support configurable form_columns
-
Support configurable layout
-
Support configurable model_namespace
-
Support configurable controller_namespace
Changed
- CRUD generator uses Bootstrap 5.2.3 as the default UI base
- Generated controllers use Eloquent Model instead of Query Builder
- Generated views support configurable parent path
Notes
- Suitable for initial scaffolding after generating migrations and seeders
- Recommended to review routes, models, and relations before production use