我已经阅读了Running one specific laravel 4 migration (single file),但这并没有给我答案。
我想知道是否有办法运行该命令,以便它只执行下一个命令,而这只是一次迁移。
我的Migrate-Folder中有10个文件。其中7个已经迁移。现在我发现,当我创建了3个新命令并运行命令时,它们都被执行了。
问题在于,在数据库中选择*来自迁移'它们出现在一批中而不是单独出现。这意味着如果我只想回滚一步,我们将回到第7步,而不是9 - 我想要的。
这有时令人困惑,因为我想一次回滚一步而不回滚一批的所有步骤。
我知道我可以将文件移到另一个文件夹中,只留一个来运行迁移。然后移动下一个并再次迁移,但这非常不方便 - 如果偶然我移动并在步骤9之前迁移步骤10会发生什么。
有人知道答案吗?
答案 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()
批处理值并将其所有迁移回滚。