krzysztofrewak / laravel-conditional-seeders
条件运行 Laravel 种子文件。
1.0.0
2020-09-13 11:26 UTC
Requires
- php: ^7.3
- illuminate/console: ^8.0
- illuminate/database: ^8.0
Requires (Dev)
- phpunit/phpunit: ^9
This package is auto-updated.
Last update: 2024-09-08 19:51:35 UTC
README
关于
相对频繁地,我需要在种子文件中放入一些逻辑,并根据某些条件运行它们(例如,我不想重复或覆盖某些数据,我只是想运行一次,或者只想在特定的环境中运行等)。将这些条件放入 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
。如果不这样做,它将无法正常工作。