onlinepets / laravel-conditional-migrations
Run your Laravel migrations only when you want them to
Installs: 1 282
Dependents: 0
Suggesters: 0
Security: 0
Stars: 1
Watchers: 2
Forks: 4
Open Issues: 0
Requires
- php: ^7.0
- laravel/framework: 5.5.* || 5.6.*
Requires (Dev)
- graham-campbell/testbench: ^4.0
- phpunit/phpunit: ^6.5
This package is not auto-updated.
Last update: 2025-04-13 08:48:26 UTC
README
We don't maintain this version anymore, checkout Laravel conditional migrations for the latest version
Laravel Conditional Migrations
This package allows you to configure migrations to run based on a condition. We
expose a ConditionalMigration
interface, which you can have your migrations
implement to determine whether or not it should run.
Index
Installation
You'll have to follow a couple of steps to install this package.
Downloading
Via composer:
$ composer require onlinepets/laravel-conditional-migrations
Or add the package to your dependencies in composer.json
and run
composer update
on the command line to download the package:
{ "require": { "onlinepets/laravel-conditional-migrations": "^1.0" } }
Registering the service provider
If you're not using auto discovery,
register the \Onlinepets\ConditionalMigrations\ServiceProvider
in config/app.php
:
'providers' => [ // ... Onlinepets\ConditionalMigrations\ServiceProvider::class, ];
Usage
To make sure a migration only runs between 1 AM and 2 AM, implement the ConditionalMigration
interface and its ->shouldRun()
method:
use Onlinepets\ConditionalMigrations\Contracts\ConditionalMigration; use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; use Illuminate\Support\Carbon; class DoSomethingVeryIntensive extends Migration implements ConditionalMigration { public function up() { Schema::table('users', function (Blueprint $table) { // }); } public function down() { Schema::table('users', function (Blueprint $table) { // }); } public function shouldRun(): bool { return (new Carbon('1 AM'))->lessThan(now()) && (new Carbon('2 AM'))->greaterThan(now()); } }
The code snippet above will make sure the do_something_very_intensive
migration
will be skipped unless it is executed between 1 AM and 2 AM. This can be useful
if your migration does something that should not be run during the daytime, like
adding an index to a table containing lots of data.
Nightly cronjob
To take full advantage of this package, you can schedule a task to migrate the database during the "whitelisted" times. This package does not implement this.
Configuration
You can optionally publish the configuration file:
$ php artisan vendor:publish --provider="Onlinepets\ConditionalMigrations\ServiceProvider"
This will create the file config/conditional-migrations.php
, which is where you can
configure whether your migrations should run, regardless of individual configuration:
return [ 'always_run' => env('APP_DEBUG', false), ];
You can also use a closure if you want to do more advanced calculations:
return [ 'always_run' => function (): bool { // calculate whether it should run }, ];
Contributing
All contributions (pull requests, issues and feature requests) are welcome. Make sure to read through the CONTRIBUTING.md first, though. See the contributors page for all contributors.
License
onlinepets/laravel-conditional-migrations
is licensed under the MIT License (MIT). Please
see the license file for more information.