onlinepets/laravel-conditional-migrations

仅在您需要时运行您的 Laravel 迁移

v1.0.0 2018-03-28 13:44 UTC

This package is not auto-updated.

Last update: 2024-09-29 05:49:16 UTC


README

我们不维护此版本了,请查看 Laravel conditional migrations 以获取最新版本

Laravel Conditional Migrations

Latest Version on Packagist Total Downloads Software License Build Status StyleCI

此包允许您根据条件配置迁移。我们暴露了一个 ConditionalMigration 接口,您可以让您的迁移实现以确定是否应该运行。

索引

安装

您需要按照几个步骤来安装此包。

下载

通过 composer

$ composer require onlinepets/laravel-conditional-migrations

或者在 composer.json 中添加包到依赖项,并在命令行上运行 composer update 来下载包

{
    "require": {
        "onlinepets/laravel-conditional-migrations": "^1.0"
    }
}

注册服务提供者

如果您 没有 使用 自动发现,请在 config/app.php 中注册 \Onlinepets\ConditionalMigrations\ServiceProvider

'providers' => [
    // ...
    Onlinepets\ConditionalMigrations\ServiceProvider::class,
];

用法

为了确保迁移仅在凌晨1点至2点之间运行,实现 ConditionalMigration 接口及其 ->shouldRun() 方法

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());
    }
}

上面的代码片段将确保 do_something_very_intensive 迁移将跳过,除非它在凌晨1点至2点之间执行。如果迁移在白天执行会对包含大量数据的表添加索引等操作,这可能会很有用。

夜间定时任务

为了充分利用此包,您可以安排一个任务在“白名单”时间内迁移数据库。此包不实现此功能

配置

您可以可选地发布配置文件

$ php artisan vendor:publish --provider="Onlinepets\ConditionalMigrations\ServiceProvider"

这将创建 config/conditional-migrations.php 文件,您可以在其中配置迁移是否应该运行,无论个人配置如何

return [
    
    'always_run' => env('APP_DEBUG', false),
    
];

如果您想进行更复杂的计算,也可以使用闭包

return [

    'always_run' => function (): bool {
        // calculate whether it should run
    },

];

贡献

所有贡献(拉取请求、问题和功能请求)都受欢迎。不过,请首先阅读 CONTRIBUTING.md。查看 贡献者页面 了解所有贡献者。

许可

onlinepets/laravel-conditional-migrations 在 MIT 许可证(MIT)下发布。请参阅 许可证文件 了解更多信息。