Deprecated:
We don't maintain this version anymore, checkout Laravel conditional migrations for the latest version
Laravel Conditional Migrations
![Software License][ico-license]
![Build Status][ico-travis]
, (*1)
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., (*2)
Index
Installation
You'll have to follow a couple of steps to install this package., (*3)
Downloading
Via composer:, (*4)
$ 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:, (*5)
{
"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
:, (*6)
'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:, (*7)
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., (*8)
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., (*9)
Configuration
You can optionally publish the configuration file:, (*10)
$ 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:, (*11)
return [
'always_run' => env('APP_DEBUG', false),
];
You can also use a closure if you want to do more advanced calculations:, (*12)
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., (*13)
License
onlinepets/laravel-conditional-migrations
is licensed under the MIT License (MIT). Please
see the license file for more information., (*14)