tarunkorat/laravel-migration-squasher
最新稳定版本:v1.0.0
Composer 安装命令:
composer require tarunkorat/laravel-migration-squasher
包简介
Squash old Laravel migrations into a single schema file
关键字:
README 文档
README
Squash old Laravel migrations into a single schema file to keep your migrations folder clean and manageable.
Fully compatible with Laravel 8, 9, 10, 11, and 12!
✨ Features
- 🗜️ Squash old migrations into a single schema file
- 📅 Keep recent migrations separate for easy tracking
- 🔒 Safe backup before any deletion
- 🚀 Faster migrations - reduce migrate:fresh time by 90%
- 🎯 Laravel 8-12 compatible - works with all modern Laravel versions
- 🔍 Dry run mode - preview changes before applying
- 🛡️ Database agnostic - works with MySQL, PostgreSQL, SQLite, SQL Server
- 📊 Clean codebase - reduce migration clutter from 100+ to just a few files
📋 Requirements
- PHP 8.0 or higher
- Laravel 8.x, 9.x, 10.x, 11.x, or 12.x
- Doctrine DBAL (automatically installed)
📦 Installation
Install the package via composer:
composer require tarunkorat/laravel-migration-squasher
The package will automatically register itself via Laravel's package discovery.
Publish Configuration (Optional)
php artisan vendor:publish --provider="TarunKorat\LaravelMigrationSquasher\MigrationSquasherServiceProvider"
This will create config/migration-squasher.php file.
🚀 Usage
Basic Usage
Squash all migrations before a specific date, keeping the 10 most recent:
php artisan migrations:squash
Preview Changes (Dry Run)
See what would be squashed without making any changes:
php artisan migrations:squash --dry-run
Custom Options
# Squash migrations before specific date php artisan migrations:squash --before=2024-01-01 # Keep specific number of recent migrations php artisan migrations:squash --keep=15 # Disable backup creation php artisan migrations:squash --no-backup # Delete migration records from database php artisan migrations:squash --delete-records # Combine multiple options php artisan migrations:squash --before=2023-06-01 --keep=20 --dry-run
⚙️ Configuration
The config file provides several options:
return [ // Date before which migrations will be squashed 'squash_before' => env('MIGRATION_SQUASH_BEFORE', '2024-01-01'), // Number of recent migrations to keep separate 'keep_recent' => (int) env('MIGRATION_SQUASH_KEEP_RECENT', 10), // Name of the generated schema dump file 'schema_file' => '0000_00_00_000000_schema_dump.php', // Create backup of squashed migrations 'backup_migrations' => env('MIGRATION_SQUASH_BACKUP', true), // Backup directory path 'backup_path' => env('MIGRATION_SQUASH_BACKUP_PATH', 'migrations/backup'), // Tables to exclude from schema dump 'excluded_tables' => [ 'migrations', ], // Delete migration records from database 'delete_batch_records' => false, ];
📊 Before & After Example
Before Squashing
database/migrations/
├── 2022_01_15_100000_create_users_table.php
├── 2022_01_15_100001_create_password_resets_table.php
├── 2022_02_20_140000_create_posts_table.php
├── 2022_02_20_140001_add_slug_to_posts_table.php
... (96 more old files)
├── 2024_10_15_140000_add_thumbnail_to_posts_table.php
├── 2024_10_20_150000_create_notifications_table.php
├── 2024_10_25_160000_add_verified_at_to_users_table.php
Total: 100 migration files 😰
After Squashing
database/migrations/
├── 0000_00_00_000000_schema_dump.php ⭐ (Entire schema in ONE file)
├── 2024_10_15_add_thumbnail_to_posts.php (Recent - Kept)
├── 2024_10_20_create_notifications.php (Recent - Kept)
├── 2024_10_25_add_verified_at_to_users.php (Recent - Kept)
Total: 4 migration files 🎉
🎯 When to Use This Package
✅ Perfect For:
- Long-running projects (1+ years old with 50+ migrations)
- Performance optimization (speed up
migrate:freshby 90%) - Team onboarding (new developers see clean migration history)
- CI/CD pipelines (faster test suite execution)
- Before major releases (clean slate for v2.0)
❌ Not Recommended For:
- New projects (< 6 months old with few migrations)
- Active feature branches (wait until merged to avoid conflicts)
- Projects that never run
migrate:fresh
🔧 How It Works
- Analyzes all migrations in your project
- Identifies migrations older than specified date
- Keeps the most recent N migrations separate
- Generates a schema dump from your current database structure
- Creates backup of squashed migrations (optional)
- Deletes old migration files
- Updates migrations table (optional)
Important Notes
- ✅ Your database stays exactly the same - no data is modified
- ✅ Only migration files are affected
- ✅ Always creates backups before deletion (unless disabled)
- ✅ Safe to run - uses dry-run mode first
🧪 Testing
composer test
📈 Performance Comparison
| Metric | Before Squash | After Squash | Improvement |
|---|---|---|---|
| Migration Files | 167 files | 11 files | 93% reduction |
migrate:fresh Time |
8 minutes | 45 seconds | 90% faster |
| CI/CD Pipeline | 2 min migrations | 30 sec migrations | 75% faster |
| Codebase Clarity | Cluttered | Clean | Much better |
🤝 Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
📝 Changelog
Please see CHANGELOG for more information on what has changed recently.
🔒 Security
If you discover any security related issues, please email tarunkorat336@gmail.com instead of using the issue tracker.
📄 License
The MIT License (MIT). Please see License File for more information.
💡 Credits
🙏 Support
If you find this package helpful, please consider:
- ⭐ Starring the repository
- 🐛 Reporting bugs and issues
- 📖 Contributing to documentation
- 💬 Sharing with other Laravel developers
Made with ❤️ for the Laravel community
统计信息
- 总下载量: 9
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 6
- 点击次数: 0
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2025-10-30