Skip to content

rdanklof/laravel-conditional-migrations

 
 

Repository files navigation

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.

About

⏰ Run your Laravel migrations only when you want them to

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • PHP 100.0%