Laravel种子数据填充后如何回滚?

19

我使用php artisan db::seed来填充我的数据库。有没有一种方法可以回滚我填充到数据库中的内容?

我似乎找不到类似于php artisan db::seed rollback的命令。


你是否已经创建了一个新的(空)数据库?还是想撤销一些更改并恢复原始数据库? - E Rullmann
@ERullmann,我想撤销使用db::seed所做的更改。 - Aaron
如果你没有备份,那就会变得更加棘手。我不认为Artisan会提供这样的本地服务。你可能需要检查一下是否有关于seed中包含的SQL命令的日志。或者,如果你的所有对象都带有创建时间戳,你可以删除自运行该命令以来创建的所有内容。 - E Rullmann
@Aaron 我知道这是老话题了,但是回滚种子绝对是疯狂的行为...如果你在生产环境中,你必须在另一个环境中测试所有内容(之前)...如果你是本地的(开发或类似),在测试新功能之前备份数据库,或者只需使用 php artisan migrate:fresh 测试并清除数据库...没有真正需要有一个_rollback_ seeder...这意味着seeder或类似工具的实现或使用很差...解决方案在其他地方,而不是回滚seeder。 - matiaslauriti
@matiaslauriti 相反,我发现这种能力在开发阶段非常方便,当你需要快速重置数据库时 - 我的意思是仅重置通过种子添加的内容,而不是其他任何内容,也不是整个数据库。 - Alex
@alex,那你为什么不使用单元测试呢?这样你就不需要这么做了。我只是想说,你需要这个是因为你使用了错误的东西或者根本没有使用应该使用的东西。 - matiaslauriti
6个回答

17

您还可以使用 migrate:refresh 命令来种子化您的数据库,该命令还将回滚并重新运行所有迁移。该命令对于完全重构数据库非常有用:

php artisan migrate:refresh --seed

运行 Seeders


有没有一种方法可以运行此命令,但指定一个 Seeder 类?(例如 php artisan db:seed --class='CustomSeeder') - Berni
@Berni 是的,执行 Artisan::call('db:seed', ['--class' => 'CustomSeeder']); 并在顶部添加 use Illuminate\Support\Facades\Artisan; - francisco

17

使用Undo Seeder为Laravel。

安装UndoSeeder后,以下artisan命令可用:

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

更多Undo-Seeder


11
如果您想清除某个表格,则只需截断该表格,然后再次进行数据填充:

如果你想要清空一张表格,那么只需要使用 TRUNCATE 命令清空它,并重新插入数据即可:

php artisan db:seed --class=UsersTableSeeder

对于这么简单的任务,不需要额外的软件包。


0

使用您正在使用的任何平台(phpMyAdmin / mySql-Workbench / DB编辑器插件等)打开数据库表,并手动删除种子内容。然后,您将能够使用php artisan db:seed重新填充表格。


0

最简单的方法是进入你的

数据库种子文件

文件夹,手动删除你想要移除的文件,然后运行php artisan migrate:fresh命令。


-1

我正在寻找其他东西,比如我已经运行了php artisan db:seed,然后我想在UserSeeder中更改一些内容,比如更改电子邮件地址。

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

那么首先您必须在任何其他代码之前添加截断函数,例如如果您有UserSeeder类,则在播种所有User模型之前在运行函数中添加以下代码:

User::truncate();

然后你所要做的就是重新运行该命令。

php artisan db:seed

根据您的更改,它将再次生成所有类,并删除数据库中已经生成的Users。您可以使用此方法来截断表并重新插入记录,适用于任何模型。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接