krzysztofrewak/laravel-conditional-seeders

条件运行 Laravel 种子文件。

1.0.0 2020-09-13 11:26 UTC

This package is auto-updated.

Last update: 2024-09-08 19:51:35 UTC


README

Latest Stable Version Total Downloads License

关于

相对频繁地,我需要在种子文件中放入一些逻辑,并根据某些条件运行它们(例如,我不想重复或覆盖某些数据,我只是想运行一次,或者只想在特定的环境中运行等)。将这些条件放入 run() 方法会使这些种子文件的可读性降低,而将它们放入 DatabaseSeeder 可能非常危险(因为有人可能直接从控制台运行它)。

我向一个抽象的 Seeder 添加了一个方法 authorize()。默认情况下,方法返回 true,因此它应该与现有的种子文件完全向后兼容。条件性地禁用任何种子文件的运行非常简单

class DisabledTestSeeder extends Seeder
{
    public function run(): void
    {
        // (...)
    }

    protected function authorize(): bool
    {
        return false;
    }
}

当然,它可以这样(确保只有在用户表为空时才触发)

protected function authorize(): bool
{
    return User::count() === 0;
}

安装

使用 Composer 包管理器包含此包

composer require krzysztofrewak/laravel-conditional-seeders ^1.0

现在,您可以将 database/seeders 目录中种子文件的基础类切换为 \KrzysztofRewak\ConditionalSeeder\ConditionalSeeder。通过重写 authorize() 方法,您可以有条件地开启或关闭相关的种子文件。

请记住,还需要将 DatabaseSeeder 的基础类也切换为 \KrzysztofRewak\ConditionalSeeder\ConditionalSeeder。如果不这样做,它将无法正常工作。