bitsnio/json-to-migration-laravel

将JSON模式转换为Laravel迁移。

v2.0.1 2024-05-03 09:49 UTC

This package is auto-updated.

Last update: 2024-10-03 13:04:14 UTC


README

简单地创建一个包含数据库模式的 .json 文件,然后运行 artisan 命令 json:migrate Template.json 以创建项目中所有迁移。

注意:此包旨在用于启动Laravel项目,而不是用于已构建的项目。

安装

您可以通过运行以下composer命令来安装此包

composer require --dev bitsnio/json-to-migration-laravel

创建JSON模板

在项目的根目录中创建一个 Template.json 文件,并使用以下模板

{
    "posts": {
        "name"   : "string:50|index:50",
        "state"  : "enum:active,inactive|default:active",
        "text"   : "text",
        "slug"   : "string:50|unique",
        "active" : "boolean|default:false",
        "user_id": "foreign|nullable|constrained|onDelete"
    },

    "categories": {
        "name" : "string",
        "image": "string"
    },

    "subcategories": {
        "name"       : "string",
        "category_id": "foreign|constrained"
    }
}

JSON的主要键代表表名。请确保按照顺序创建它们,以防一个表与其他表有关系。在这种情况下,postscategoriessubcategories 是我们的表。

接下来,对于每个表,将您的列定义为键(例如,这里的 namestatetext 等),并设置它们的属性。

属性

属性由竖线 (|) 分隔,第一个属性始终是列类型。该包支持Laravel中的所有列类型。

可以使用冒号 (:) 后跟选项值来提供附加选项(例如,字符串长度)。可以提供多个选项(例如,对于 float)。

迁移

使用以下方式运行

php artisan json:migrate schema.json

上述模式将创建三个不同的迁移。posts 模式将如下所示

<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreatePostsTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('posts', function (Blueprint $table) {
            $table->id();
            $table->string("name", 50)->index();
            $table->enum("state", ['active', 'inactive'])->default('active');
            $table->text("text");
            $table->string("slug", 50)->unique();
            $table->boolean("active")->default(false);
            $table->foreignId("user_id")->nullable(true)->constrained()->onDelete('cascade');
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('posts');
    }
}