jumilla/laravel-versionia

Laravel 5 的基于版本的数据库迁移系统。

安装量: 2,790

依赖者: 4

建议者: 0

安全性: 0

星标: 22

关注者: 4

分支: 0

开放问题: 2

类型:框架扩展

2.0.0 2017-09-19 05:46 UTC

README

Build Status Quality Score Code Coverage Latest Stable Version Total Downloads Software License

日本語ドキュメント - Japanese

Laravel 5 的基于版本的数据库迁移系统。

Laravel Versionia 是一个基于版本的数据库迁移系统。它可以在 Laravel 5 和 Lumen 5 中使用。

概念

作为“迁移”的功能将标准加载到 Laravel 4 和 5 中,用于管理数据库(RDB)模式。

迁移是一种机制,通过时间序列来管理模式创建和更改。还提供了一个作为在数据库早期阶段定义数据的“种子”的 PHP 类以及 artisan 命令。

Versionia 使标准迁移更容易使用。

  • 将程序员指定的“版本”添加到 Laravel 5 的迁移中。
  • 由于 Laravel 5 的 Seeder 类可以根据名称区分,因此可以轻松地更改多个种子。
  • 它是通过 Laravel 5 架构提供的服务提供者实现的。
  • 迁移和种子类可以放在 app 目录下。

服务提供者用作 Laravel 5 应用程序,并提供由 Composer 软件包提供的功能。服务提供者定义了路由和事件监听器,但迁移和种子现在可以在此定义。

安装方法

[A] 包含 Laravel 扩展 (Laravel)。

当使用 Laravel 5 时,这里推荐这样做。注意:支持包发现。

使用 Composer

composer require laravel-plus/extension

有关更多信息,请参阅 Laravel 扩展 的说明。

[B] 包含 Versionia (Laravel)

注意:支持包发现。

使用 Composer

composer require jumilla/laravel-versionia

[C] 包含 Versionia (Lumen)

当使用 Lumen 时,这里推荐这样做。

使用 Composer

composer require jumilla/laravel-versionia

接下来,将以下代码添加到 boostrap/app.php

$app->register(Jumilla\Versionia\Laravel\ServiceProvider::class);

迁移版本定义

迄今为止,迁移类的文件名中存在命名规则,迁移的顺序是通过将文件生成日期和时间嵌入文件名中时的时间顺序决定的。每个迁移类都给出了特定的小组和版本,它由 Versionia 中的 DatabaseServiceProvider 类定义。

<?php

namespace App\Providers;

use Jumilla\Versionia\Laravel\Support\DatabaseServiceProvider as ServiceProvider;
use App\Database\Migrations;
use App\Database\Seeds;

class DatabaseServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        $this->migrations('framework', [
            '1.0' => Migrations\Framework_1_0::class,
        ]);

        $this->migrations('app', [
            '1.0' => Migrations\App_1_0::class,
        ]);

        // ... seed definition ...
    }
}

注册 DatabaseServiceProvider

当创建新的服务提供者时,请注册。当使用 Laravel 扩展 时,它已经包含在内,因此不需要添加。

Laravel

App\Providers\DatabaseServiceProvider::class 已添加到 app\config.php

    'providers' => [
        ...
        App\Providers\ConfigServiceProvider::class,
        App\Providers\DatabaseServiceProvider::class,
        App\Providers\EventServiceProvider::class,
        ...
    ],

Lumen

接下来,将以下代码添加到 bootstrap\app.php

$app->register(App\Providers\DatabaseServiceProvider::class);

版本号

Versionia 使用 PHP 标准函数 version_compare() 进行版本号比较。请指定以点结尾的字符串作为版本号。

迁移类

Laravel 5 标准的 make:migration 生成的迁移类可以像现在这样使用。

如果按照推荐将它们放在 app\Database\Migrations 目录中,请添加 namespace App\Database\Migrations

以下是一个迁移定义的示例。

<?php

namespace App\Database\Migrations;

use Jumilla\Versionia\Laravel\Support\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class App_1_0 extends Migration
{
    /**
     * Migrate the database to forward.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('posts', function (Blueprint $table) {
            $table->increments('id');
            $table->string('title');
            $table->text('content');
            $table->json('properties');
            $table->timestamps();
        });
    }

    /**
     * Migrate the database to backword.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('posts');
    }
}

种子类

以下代码定义了 teststagingproduction。方法 seeds() 的第二个参数指定 test 作为默认种子。

<?php

namespace App\Providers;

use Jumilla\Versionia\Laravel\Support\DatabaseServiceProvider as ServiceProvider;
use App\Database\Migrations;
use App\Database\Seeds;

class DatabaseServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
    	//... migration definition ...

        $this->seeds([
            'test' => Seeds\Test::class,
            'staging' => Seeds\Staging::class,
            'production' => Seeds\Production::class,
        ], 'test');
    }
}

种子类如下所示。

<?php

namespace App\Database\Seeds;

use Jumilla\Versionia\Laravel\Support\Seeder;
use Carbon\Carbon;

class Staging extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        $now = Carbon::now();

        app('db')->table('posts')->truncate();

        app('db')->table('posts')->insert([
            'title' => 'Sample post',
            'content' => 'Hello laravel world.',
            'properties' => json_encode([
                'author' => 'Seeder',
            ], JSON_PRETTY_PRINT),
            'created_at' => $now,
            'updated_at' => $now,
        ]);
    }
}

命令

database:status

迁移和种子定义、安装状态显示。

php artisan database:status

数据库:升级

运行所有组的up()迁移方法,然后更新。

php artisan database:upgrade

迁移后可以制作它们为种子。

php artisan database:upgrade --seed <seed>

数据库:清理

运行所有组的down()迁移方法,然后清理状态。

php artisan database:clean

数据库:刷新

所有组的迁移重新执行。

与运行database:cleandatabase:upgrade相同。

php artisan database:refresh

迁移后可以运行种子。

php artisan database:refresh --seed <seed>

数据库:回滚

指定组的版本退回一个。

php artisan database:rollback <group>

当指定--all选项时,移除组的所有版本。

php artisan database:rollback <group> --all

数据库:再次

重新运行组最新的迁移版本。

与运行database:rollback <group>database:upgrade相同。

php artisan database:again <group>

迁移后可以运行种子。

php artisan database:again <group> --seed <seed>

数据库:种子

运行指定的种子。

php artisan database:seed <seed>

当省略<seed>时,运行默认种子。

php artisan database:seed

版权

古川 文生 / Fumio Furukawa (fumio@jumilla.me)

许可

MIT