7

我已经阅读了运行一个特定的 laravel 4 迁移(单个文件),但这并没有给我答案。

我想知道是否有一种方法可以运行命令,以便它只执行下一个迁移,并且只是这个迁移。

我的 Migrate 文件夹中有 10 个文件。其中 7 个已迁移。现在我发现当我创建了 3 个新的并运行命令时,它们都被执行了。

问题在于,在数据库“从迁移中选择 *”中,它们以一批而不是单独的一批出现。这意味着如果我只想回滚一步,我们将回到第 7 步而不是第 9 步——这是我想要的。

这有时会令人困惑,因为我想一次回滚一个步骤,而不是回滚一批的所有步骤。

我知道我可以将文件移动到另一个文件夹中,只留下一个运行迁移。然后移动下一个并再次迁移,但这非常不方便 - 如果我在步骤 9 之前意外移动并迁移步骤 10 会发生什么。

有人知道这个问题的答案吗?

4

4 回答 4

13

在 laravel 5.4 中,您可以: php artisan migrate --step

当您执行这样的命令时,您可以使用默认的“php artisan migrate:rollback”单独回滚每个迁移,而无需指定回滚的步骤。

于 2017-05-27T11:43:26.603 回答
1

有点 hack,但您可以artisan migrate运行所有迁移,然后使用以下 SQL 命令使其看起来像一次运行一个迁移:

SET @a = 0;  
UPDATE migrations SET batch = @a:=@a+1;

这会将批处理列更改为 1、2、3、4 .. 等。WHERE batch>=...在那里添加一个条件(并更新 的初始值@a)以仅影响某些迁移。

然后,您可以artisan migrate:rollback根据需要进行操作。

于 2015-08-24T21:14:59.547 回答
0

我不知道一次向前迁移一个的方法。但是您可以像这样一次回滚一个迁移:

php artisan migrate:rollback --step=1
于 2021-10-14T19:12:12.343 回答
-1

问题在于,在数据库“从迁移中选择 *”中,它们以一批而不是单独的一批出现。这意味着如果我只想回滚一步,我们将回到第 7 步而不是第 9 步——这是我想要的。

这不是非常理想,但是在运行它们之后,您可以batch将数据库表中每个迁移的值调整为单独的数字。php artisan migrate:rollback获取MAX()批处理值并将其所有迁移回滚。

于 2015-06-12T20:13:05.247 回答