播种数据库后的laravel种子回滚

Posted

技术标签:

【中文标题】播种数据库后的laravel种子回滚【英文标题】:laravel seed rollback after seeding database 【发布时间】:2017-11-27 12:37:10 【问题描述】:

我已使用php artisan db::seed 为我的数据库播种。有没有办法回滚我在数据库中播种的内容?

我似乎找不到像php artisan db::seed rollback 这样的命令。

【问题讨论】:

您是否播种了一个新的(空)数据库?或者您是否希望撤消一些更改并恢复原始数据库? @ERullmann,我希望撤消使用 db::seed 所做的更改 如果您没有备份,那就更麻烦了。我不认为工匠会提供这样的本地服务。您可能想检查是否有关于作为种子一部分的 SQL 命令的日志。或者,如果您的所有对象都带有创建时间的时间戳,您可以删除自运行命令以来创建的所有内容。 @Aaron 我知道这已经过时了,但是崇敬/回滚种子绝对是疯狂的......如果你在生产中,你必须在另一个环境中测试所有东西(之前)......如果你是本地的(开发人员或类似的),在测试新功能之前一直备份数据库,或者只是使用php artisan migrate:fresh 测试和擦除数据库...实际上不需要 rollback 播种机。 ..这意味着播种机或类似设备的实施或使用不佳...解决方案在其他地方,而不是恢复播种机。 @matiaslauriti 完全相反,当您需要快速重置数据库时,我发现这种功能非常方便(在开发阶段) - 我的意思是只重置通过种子添加的东西而不是其他任何东西,并且不擦除整个数据库。 【参考方案1】:

在 Laravel 中使用 Undo Seeder。

当您安装 UndoSeeder 时,以下工匠命令可用:

db:seed-undo    Undo seeds in the seeds directory.
db:seed-refresh Undo seeds run seeds again.

更多Undo-Seeder

【讨论】:

【参考方案2】:

您还可以使用 migrate:refresh 命令为您的数据库播种,该命令还将回滚并重新运行您的所有迁移。此命令对于完全重建数据库很有用:

php artisan migrate:refresh --seed

Running Seeders

【讨论】:

是否可以运行此命令但指定播种器类? (如 php artisan db:seed --class='CustomSeeder' =【参考方案3】:

如果你想清除某个表,那么只需 TRUNCATE 那个表,然后重新播种:

php artisan db:seed --class=UsersTableSeeder

这样简单的任务不需要额外的包。

【讨论】:

【参考方案4】:

我一直在寻找其他东西,比如我运行过 php artisan db:seed,之后我想更改 UserSeeder 中的一些内容,比如更改电子邮件地址。

因此,如果您想更改 Seeder 类中的某些内容并且您已经运行了 db:seed 命令。

那么您所要做的就是根据您的选择更改您的 Seeder 类功能,然后重新运行该命令。

php artisan db:seed

它将根据您的更改再次为所有类播种。

【讨论】:

【参考方案5】:

最简单的方法是进入你的

数据库/播种器

文件夹并手动删除要删除的文件,然后运行php artisan migrate:fresh

【讨论】:

以上是关于播种数据库后的laravel种子回滚的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 4 db 种子特定播种器文件

Laravel 迁移外键取决于种子数据

Laravel - 播种大型 SQL 文件

如何在 Laravel 中数据库种子 JSON 字段?

在没有 Laravel 的情况下使用 Laravel 数据库迁移和种子 [关闭]

Laravel Dusk:迁移和种子测试数据库一次