雪崩/laravel-seeder-reset

在运行之前重置 Laravel 种子文件

0.0.3 2023-08-13 23:38 UTC

This package is auto-updated.

Last update: 2024-09-14 01:57:47 UTC


README

Laravel SeederReset Package Logo

Latest Version on Packagist Total Downloads GitHub Actions

介绍

提示开发者执行种子文件前截断表并删除旧数据。非常适合禁止重复数据的种子项目!

Laravel SeederReset Package Logo

安装

您可以通过 composer 安装此包

composer require snowbuilds/laravel-seeder-reset

用法

在您的种子类中包含 SnowBuilds\SeederReset\Concerns\SeederTruncate 特性。下次运行种子文件时,您将收到截断种子文件的提示。当选择截断时,在运行种子文件之前将截断指定的模型

use SnowBuilds\SeederReset\Concerns\SeederTruncate;

use Illuminate\Database\Seeder;

class PostSeeder extends Seeder
{
    use SeederTruncate;

    public $truncate = [
        App\Models\User::class,
        App\Models\Comment::class,
        App\Models\Post::class,
    ];

    public function run () {
        //
    }
}

列出要截断的表

当截断属性不足以满足需求时,您可以从 getTruncate 方法返回一个数组

use SnowBuilds\SeederReset\Concerns\SeederTruncate;

use Illuminate\Database\Seeder;

class PostSeeder extends Seeder
{
    use SeederTruncate;

    public function getTruncate() {
        return [
            App\Models\User::class,
            App\Models\Comment::class,
            App\Models\Post::class,
        ]
    };

    public function run () {
        //
    }
}

重置种子文件 - 调用截断

有时您可能有调用其他种子文件的种子文件。如果您只想被提示一次,可以调用截断方法

use SnowBuilds\SeederReset\Concerns\SeederTruncate;

use Illuminate\Database\Seeder;

class DatabaseSeeder extends Seeder
{
    use SeederTruncate;

    public function run () {
        $this->truncate([
            UserSeeder::class,
            RecipeSeeder::class,
        ]);

        $this->call([
            UserSeeder::class,
            RecipeSeeder::class,
        ]);
    }
}

重置种子文件 - 替换调用

如果您想进行更隐晦的操作,可以将 call 方法替换为 reset 方法,该方法将在调用之前重置每个种子文件

use SnowBuilds\SeederReset\Concerns\SeederTruncate;

use Illuminate\Database\Seeder;

class DatabaseSeeder extends Seeder
{
    use SeederTruncate;

    public function run () {
        $this->reset([
            UserSeeder::class,
            RecipeSeeder::class,
        ]);
    }
}

覆盖种子文件

如果您想保持相同的 API 但想调用其他种子文件,我们建议扩展 SnowBuilds\SeederReset\Seeder

use SnowBuilds\SeederReset\Concerns\SeederTruncate;

use SnowBuilds\SeederReset\Seeder;

class DatabaseSeeder extends Seeder
{
    public function run () {
        $this->call([
            UserSeeder::class,
            RecipeSeeder::class,
        ]);
    }
}

钩子

有时截断不足以满足需求,在播种前需要删除特定的行。我们包括 beforeTruncateafterTruncate 钩子,可用于删除您想要的任何内容。如果钩子失败,操作将回滚。

重要 由于 MySql 限制,截断操作不在事务中执行。如果钩子失败,截断的表将保持为空。

use SnowBuilds\SeederReset\Concerns\SeederTruncate;

use SnowBuilds\SeederReset\Seeder;

class DatabaseSeeder extends Seeder
{
    public function beforeTruncate()
    {
        User::moderators()->delete();
        User::customers()->delete();
    }

    public function run () {
        $this->call([
            UserSeeder::class,
            RecipeSeeder::class,
        ]);
    }
}

路线图

  • 从模型列表截断表
  • 使用表名截断
  • 使用查询删除数据

变更日志

有关最近更改的更多信息,请参阅 CHANGELOG

贡献

有关详细信息,请参阅 CONTRIBUTING

安全

如果您发现任何与安全相关的问题,请通过电子邮件 dev@snowlaboratory.com 而不是使用问题跟踪器。

行为准则

为了确保 Laravel 社区对所有成员都友好,请查阅并遵守 行为准则

鸣谢

许可证

MIT 许可证 (MIT)。有关更多信息,请参阅 许可证文件