如何运行Laravel的工匠一次迁移一步?

时间:2015-06-12 19:45:44

标签: laravel-4 artisan-migrate

我已经阅读了Running one specific laravel 4 migration (single file),但这并没有给我答案。

我想知道是否有办法运行该命令,以便它只执行下一个命令,而这只是一次迁移。

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

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

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

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

有人知道答案吗?

3 个答案:

答案 0 :(得分:8)

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

当你执行这样的命令时,你可以使用默认的" php artisan migrate:rollback"来逐步回滚每次迁移。没有指定要回滚的步骤数。

答案 1 :(得分:1)

有点破解,但您可以运行my @a=(); my @b=(); my @a1=(); my @b1=(); my @perl_array=(); my @filena = split(/\|/, $filename); open (TXT, "<$filename") || die "Can't open $filename: $!\n"; while (my $line=<TXT>) { chomp($line); ($a2, $b2) = split /,/, $line; push @a,('"', "$a2", '"', ','); push @b,('"', "$b2", '"', ','); } splice @a,0,4; # this splice is used to remove the header name. splice @b,0,4; # i.e. first row data- secid, Initial_shares push @a1,"var secid=[@a]"; push @b1,"var Initial_shares=[@b]"; push @perl_array, "@a1; @b1"; close TXT; 来运行所有迁移,然后使用以下SQL命令使其看起来像是一次运行一个迁移:

artisan migrate

这会将批次列更改为1,2,3,4等。在那里添加SET @a = 0; UPDATE migrations SET batch = @a:=@a+1; 条件(并更新WHERE batch>=...的初始值)仅影响某些迁移。

然后您可以根据需要@a

答案 2 :(得分:-1)

  

问题在于,在数据库“select * from migrations”中,它们显示在一个批处理中,而不是单独存在。这意味着如果我只想回滚一步,我们将回到第7步,而不是9 - 我想要的。

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

相关问题