Best laravel framework open-source packages.

Laravel conditional migrations

⏰ Run your Laravel migrations only when you want them to
Updated 2 years ago

Deprecated:

We don't maintain this version anymore, checkout Laravel conditional migrations for the latest version


Laravel Conditional Migrations

Latest Version on Packagist Total Downloads Software License Build Status StyleCI

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.