bastinald/laravel-automatic-migrations

3.0.1 2021-09-14 03:53 UTC

README

此包允许您通过模型类中的 migration 方法指定迁移。当您运行 migrate:auto 命令时,它使用Doctrine比较您的模型 migration 方法和现有模式,并自动应用更改。

此包可以很好地与传统的Laravel迁移文件一起使用,适用于您仍然需要与模型无关的迁移的情况。当您运行 migrate:auto 命令时,它将首先运行传统迁移,然后是自动迁移。

文档

安装

通过composer要求包

composer require bastinald/laravel-automatic-migrations

用法

在您的模型中声明一个 migration 方法

namespace App\Models;

use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Eloquent\Model;

class MyModel extends Model
{
   public function migration(Blueprint $table)
   {
       $table->id();
       $table->string('name');
       $table->timestamp('created_at')->nullable();
       $table->timestamp('updated_at')->nullable();
   }
}

运行 migrate:auto 命令

php artisan migrate:auto

命令

创建模型

创建包含 migration 方法的模型

php artisan make:amodel {class} {--force}

此命令还将创建一个定义指向模型方法的工厂。使用 --force 覆盖现有模型。

运行迁移

运行自动迁移

php artisan migrate:auto {--f|--fresh} {--s|--seed} {--force}

使用 -f 清空数据库,使用 -s 在迁移后播种,并使用 --force 在生产环境中运行迁移。

迁移顺序

您可以通过在模型中添加公共 migrationOrder 属性来指定运行模型迁移的顺序。这对于枢纽表或必须先创建某个表再创建另一个表的情况很有用。

class MyModel extends Model
{
    public $migrationOrder = 1;

    public function migration(Blueprint $table)
    {
        $table->id();
        $table->string('name');
        $table->timestamp('created_at')->nullable();
        $table->timestamp('updated_at')->nullable();
    }
}

migrate:auto 命令将按指定的顺序运行自动迁移。如果未声明模型顺序,则默认为 0。感谢 @vincentkedison 提出此想法。

发布占位符

通过发布包文件使用您自己的模型和工厂占位符

php artisan vendor:publish --tag=laravel-automatic-migrations

更新 config/laravel-automatic-migrations.php 中的 stub_path

'stub_path' => resource_path('stubs/vendor/laravel-automatic-migrations'),

现在编辑 resources/stubs/vendor/laravel-automatic-migrations 内的占位符文件。命令将现在使用这些占位符文件来创建模型和工厂。