kdabrow / seeder-once
只运行一次 Laravel 种子文件
Requires
- php: >=8.2.0
- illuminate/console: ^10.0|^11.0
- illuminate/database: ^10.0|^11.0
- illuminate/support: ^10.0|^11.0
Requires (Dev)
- orchestra/testbench: ^9.0|^9.0
README
Laravel Seeder Once
这个库允许你只运行一次你的 Laravel 种子文件。
无论 artisan 命令 db:seed
被调用多少次,已经完成的种子文件将不会被再次执行。
工作原理
与迁移类似工作。首先在数据库中创建表,然后记录所有扩展抽象类 Kdabrow\SeederOnce\SeederOnce
的种子。总的来说,这将防止在以前执行过的方法 run()。将数据记录到数据库中的机制深受 Laravel 迁移机制(来自 illuminate/database 包)的启发。
如何使用它
1. 安装它
通过 composer
在 Lumen 中,别忘了在 bootstrap/app.php 中注册提供者
$app->register(Kdabrow\SeederOnce\Providers\SeederOnceProvider::class);
2. 在数据库中创建种子文件表
使用此命令
php artisan db:install
此步骤是可选的。SeederOnce 特性会检测表是否存在。如果不存在,会自动创建。
3. 使用 SeederOnce 扩展你希望只运行一次的种子文件
结果应该看起来像这样
use Kdabrow\SeederOnce\SeederOnce; class SomeSeeder extends SeederOnce { /** * Seed the application's database. * * @return void */ public function run() { // } }
这可以防止再次运行已经运行过的 SomeSeeder 类。
提示:始终替换 Seeder 类为 SeederOnce。否则,db:seed
命令可能会打印出意外的结果。
配置
多次运行种子文件
可以通过将参数 $seedOnce 更改为 false 来覆盖默认功能
use Kdabrow\SeederOnce\SeederOnce; class DatabaseSeeder extends SeederOnce { public bool $seedOnce = false; /** * Seed the application's database. * * @return void */ public function run() { // } }
这样的种子文件将像正常的 Laravel 种子文件一样运行(每次调用都会运行)。
配置文件
可以发布配置文件
php artisan vendor:publish --tag=seederonce.config
表名
默认表名是:seeders
控制台输出
默认情况下,seeder-once 会更改 db:seed 控制台命令的输出。过去已经运行过的种子文件将不会打印在命令输出中。你可以通过配置或环境变量来更改此行为。
SEEDER_ONCE_PRINT_OUTPUT=true
已运行种子文件的输出如下
Database\Seeders\SomeSeeder was already seeded ..................... DONE
其他
关于先前版本的 重要说明
在先前版本中 SeederOnce 是一个特性。由于 Laravel 控制台输出在 9.21 版本中发生了变化,我被迫将特性更改为抽象类。 如果你想继续使用特性,请使用 seeder-once 2.2 版本。唯一的问题是命令 db:seed 的输出相当混乱。