sonole / laravel-db-seed-rollback

v1.0.1 2023-11-09 11:53 UTC

This package is auto-updated.

Last update: 2024-09-08 16:22:03 UTC


README

简介
在包开发的情况下,尤其是那些涉及数据库种子器的,我建议为 db:seed 命令引入 --rollback 选项。这个特性补充了现有的 migrate:rollback 命令,并为高效数据库种子管理提供了解决方案。

问题
目前,许多项目依赖于使用种子器修改数据库的包。然而,当出现错误、需求变更或需要删除包等复杂情况时,缺乏回滚这些种子更改的流畅机制。虽然 migrate:rollback 命令有助于迁移,但在涉及多个自定义包的复杂项目中,缺乏针对种子器的相应选项,这带来了挑战。

解决方案
通过引入 db:seed 命令的 --rollback 选项,包的开发者和维护者现在可以解决这些问题。

用例
只需运行带有 --rollback 选项的 db:seed 命令,就会调用 down() 函数!

php artisan db:seed --class="Vendor\\Package\\Database\\Seeders\\UsersSeeder" --rollback 
#or
php artisan db:seed --rollback
namespace Vendor\Package\Database\Seeders

/** If your seeder does not extend the package's Seeder:
 * Sonole\LaravelDbSeedRollback\Illuminate\Database\Seeder
 * then a new temporary file will be created at database/seeders, and it will be deleted after down() execution. 
*/
use Illuminate\Database\Seeder;

class UsersSeeder extends Seeder
{
    /**
     * Seed the application's database.
     */
    public function run(): void
    {
         //\App\Models\User::factory(10)->create();

        // \App\Models\User::factory()->create([
        //     'name' => 'Test User',
        //     'email' => 'test@example.com',
        // ]);
    }

    /**
     * Reverse the effects of the database seeding operation.
     */
    public function down(): void
    {
        \App\Models\User::where('email', 'foo@bar.com')->delete();
    }
}