从一开始,我们就在其中一个项目中使用Laravel(5.8)迁移。在开发过程中,我们进行了一些迁移。一段时间后,我们发现某些迁移与设置/配置有关。因此,我们通过重命名迁移文件来将它们上移,例如:
2019_08_05_104213_create_financial_years_table
到
2016_08_31_104213_create_financial_years_table
之后,我们继续前进,在某个阶段,我们制作了更多的迁移文件,然后运行php artisan migrate
。但是出现了错误:
基本表或视图已存在:...表'financial_years'已存在
因此,我们尝试删除基表(在这种情况下为financial_years
),然后也从migrations
表中删除了提及“ ... financial_years ...”的行。
但是php artisan migrate
一次又一次出现相同的错误。我们检查了整个数据库,但没有找到index
或financial_years
的表。
我们知道,我们可以运行php artisan migrate:refresh
进行新的迁移。但是我们数据库中的数据很重要,我们现在不想弄乱这些数据。我们可能会在进行生产时进行新的迁移,但现在不进行。
在这种情况下,我们如何进行Laravel迁移?
答案 0 :(得分:3)
您的迁移表按旧文件2019_08_05_104213_create_financial_years_table
的名称包含一个旧条目。现在,由于您更改了文件名,Laravel认为这是一个新的迁移。因此它也运行该文件。
快速解决方案是还 在迁移表中编辑文件名 。
答案 1 :(得分:1)
当您运行迁移命令php artisan migrate
时会引发异常,因为迁移实际上首先需要父表,然后在它们之间存在关系时才需要子表。
就您而言,
/migrations/
目录中重命名您的迁移文件,以使父迁移表时间戳出现在子表迁移之前,并且migrations
表(在运行该表之前,找到相应的行ID并将其放在?
中)UPDATE `migrations` SET `migration`='2016_08_31_104213_create_financial_years_table' WHERE `id`= ?;
答案 2 :(得分:0)
尽管我们尚不知道问题的原因,但我们实际上陷于茫茫荒野。在这片贫瘠的土地上,我们的一位同事(Shakhawat Hossain先生)提出了另一种解决方案:
financial_years
,并将migrations
表恢复为其先前的状态。 (意味着我们回滚到默认状态?)database/migrations/
到其他地方的迁移文件(会引起问题)php artisan migrate
。它成功运行所有新迁移,没有任何错误。问题现在已经解决。
但是最终的解决方案将是php artisan migrate:refresh
-我们获悉。但是,您知道,这不是我们现在的情况。
答案 3 :(得分:0)
请首先在数据库的迁移表中检查迁移是否具有相同的名称(如果已经存在),则将其删除并再次运行。 您可以尝试添加迁移:
Schema::drop('financial_years');
答案 4 :(得分:0)
Laravel假定您正在尝试运行新的迁移。在运行时,它会发现迁移表中的条目存在,因为您仅更改了名称。 'php artisan migration:reset'是最好的解决方案,但是由于您不想丢失数据,因此必须手动修复迁移表中的文件名。