如何 delete/refresh 在 laravel 中进行特定迁移
How to delete/refresh specific migration in laravel
我正在处理一个包含许多迁移的大型项目。我想在 table 中添加一列,但我不想为一个 table 维护多个迁移。我怎样才能做到这一点?有什么方法可以 migrate:refresh 只进行一次迁移吗?
我认为迁移设计为 运行 按顺序进行,因为每个迁移都可能依赖于较早的迁移。
例如,migration#1 可以创建一个 table,而 migration#2 可以向该 table 添加一些额外的字段。如果您尝试 运行 迁移#2 而没有 运行 #1 那么它将失败。
当您 运行 artisan 迁移时,它只会 运行 尚未应用的迁移,除非您使用 migrate:refresh,在这种情况下它将重置并且re-run 所有迁移。
如果您 dead-set 仅 运行 进行一次迁移 - 您可以暂时删除所有您 不想要 运行 的迁移从目录和 运行 迁移命令。然后把剩下的移回去。这是一个棘手的解决方法,但它可以解决问题。
我认为还有一种选择可能最适合您:
php artisan migrate --path=/database/migrations/selected/
您想要的迁移位于 /selected/ 目录中(您需要创建该目录)。
您可以创建一个将添加新列的新迁移,即:
Schema::table('users', function (Blueprint $table) {
$table->string('additional_field');
});
和 运行 php artisan migrate
这将使用新列更新您的 table,并且不会干扰其他 table。
我正在处理一个包含许多迁移的大型项目。我想在 table 中添加一列,但我不想为一个 table 维护多个迁移。我怎样才能做到这一点?有什么方法可以 migrate:refresh 只进行一次迁移吗?
我认为迁移设计为 运行 按顺序进行,因为每个迁移都可能依赖于较早的迁移。
例如,migration#1 可以创建一个 table,而 migration#2 可以向该 table 添加一些额外的字段。如果您尝试 运行 迁移#2 而没有 运行 #1 那么它将失败。
当您 运行 artisan 迁移时,它只会 运行 尚未应用的迁移,除非您使用 migrate:refresh,在这种情况下它将重置并且re-run 所有迁移。
如果您 dead-set 仅 运行 进行一次迁移 - 您可以暂时删除所有您 不想要 运行 的迁移从目录和 运行 迁移命令。然后把剩下的移回去。这是一个棘手的解决方法,但它可以解决问题。
我认为还有一种选择可能最适合您:
php artisan migrate --path=/database/migrations/selected/
您想要的迁移位于 /selected/ 目录中(您需要创建该目录)。
您可以创建一个将添加新列的新迁移,即:
Schema::table('users', function (Blueprint $table) {
$table->string('additional_field');
});
和 运行 php artisan migrate
这将使用新列更新您的 table,并且不会干扰其他 table。