custom-d/laravel-seedonce

Laravel 包,用于只运行一次迁移

v2.0.0 2023-03-07 01:42 UTC

This package is auto-updated.

Last update: 2024-09-07 05:29:08 UTC


README

Build Status Total Downloads Latest Stable Version License

Laravel SeedOnce

此包与 php artisan migrate 类似工作。当使用此包时,即使多次运行 php artisan db:seed(每次部署),每个迁移器也只会运行一次。

为什么开发了这个包?

此包的目的是为了使开发者更容易在团队中运行迁移器,并在自动化部署期间运行迁移器。无需记住哪些迁移器已执行,哪些尚未执行。所有这些都由本包处理。

假设

此包假设您使用一个迁移器(例如 DatabaseSeeder)类作为运行所有其他迁移器的主/父类。此主迁移器类不应直接在其自身上插入任何数据。它应该仅用于运行其他迁移器类。

安装

使用 composer 安装此包。

composer require custom-d/laravel-seedonce

可选,发布包配置文件。默认配置在大多数情况下都适用。

php artisan vendor:publish --tag=laravel-seedonce-config

通过 composer 安装包后,运行迁移以创建一个将包含迁移器信息的表。

php artisan migrate

注意:这将创建一个名为 seeders 的表。如果您想更改此表名,则必须发布包的配置(上述步骤)并修改 config/seedonce.php 中的 table 的值。

配置

发布配置文件后,您可以编辑它以满足您的需求。配置选项如下

  • table:这是将保存已执行迁移器详细信息的表名。默认值是 seeders,在大多数情况下应该适用。
  • database_seeder:这是将种子所有其他迁移器的类的名称。在大多数情况下,这将默认为 DatabaseSeeder。确保在您使用不同的类作为种子所有其他迁移器的入口点时更改此值。
  • folder_seeder:这是包含迁移器文件的文件夹,laravel < 8 使用 seeds,laravel >= 8 使用 seeders

使用方法

在所有迁移器类中包括主迁移器(例如 DatabaseSeeder)类中使用 CustomD\SeedOnce\Traits\SeedOnce 特性。

<?php
File: database/seeds/DatabaseSeeder.php

use Illuminate\Database\Seeder;
use CustomD\SeedOnce\Traits\SeedOnce;

class DatabaseSeeder extends Seeder
{
    use SeedOnce;

    /**
     * Seed the application's database.
     *
     * @return void
     */
    public function run()
    {
        $this->call(UsersTableSeeder::class);
        $this->call(RolesTableSeeder::class);
    }
}
?>

<?php
File: database/seeds/UsersTableSeeder.php

use Illuminate\Database\Seeder;
use CustomD\SeedOnce\Traits\SeedOnce;

class UsersTableSeeder extends Seeder
{
    use SeedOnce;

    /**
     * Seed the application's database.
     *
     * @return void
     */
    public function run()
    {
        // User table seeder logic
    }
}
?>

就这么多。现在无论您运行多少次 php artisan db:seedUsersTableSeeder 也只会执行一次。

有现有迁移器的项目

上述使用说明假设您在运行任何迁移器之前已安装此包。如果您在安装此包之前已执行了一些或所有迁移器,那么您需要将那些迁移器标记为已执行。

运行以下命令将所有现有迁移器类标记为已执行。

php artisan seedonce:mark-seeded

如果您只想标记特定的迁移器类为已执行,则运行此命令

php artisan seedonce:mark-seeded --class=UsersTableSeeder

迁移器状态

您通常会想知道您的迁移器类的状态,即哪些迁移器已执行,哪些尚未执行。运行以下命令以获取状态

php artisan seedonce:status

这将输出一个包含每个迁移器类状态的表格

测试

可以通过以下命令执行包的单元测试(从包的根目录内部)

composer test

致谢

许可

MIT 许可证(MIT)。请参阅许可文件以获取更多信息。