2016-04-27 56 views
0

因此,该应用程序在生产和本地运行情况良好。然后,在本地,我对数据库进行了一些更改,例如添加列和更改列的属性。当我去本地迁移时,出现了一个错误,所以我最终删除了这个迁移文件,回滚了整个表格,并创建了一个全新的迁移,并创建了一切按我的需要设置的迁移。迁移到本地并且正在工作。Laravel迁移本地与生产

现在,我将这些更改推送到github,它们会自动提取到Laravel Forge并转到生产服务器。我收到一个错误,说“表已经存在”。因此,github存储库为我的生产服务器上已经运行的那个表提供了新的迁移。

我想弄清楚如何解决这个问题而不扰乱当前生产数据库表中的记录,并确保在需要删除表的情况下存在迁移。

谢谢!

+0

这里阅读更多这是一个在那些你真正意识到分期/生产影子服务器的重要性的情况:) – blackpla9ue

+0

什么是“生产阴影”? –

+0

在部署到活动服务器之前,它首先“部署”部署,以减轻直接将更改部署到活动服务器的一些问题。如此。特别是在有多个开发人员在单个项目上工作并且涉及迁移脚本的情况下,它确实派上用场。 – blackpla9ue

回答

3

如果您想在生产的数据库中添加新列或更改任何内容。

您需要创建一个将这些行添加到数据库的新迁移。这不像改变现有的迁移一样简单。

您在生产中获得“表已存在”的原因是因为迁移已经运行。

例如,如果您有一个用户的表已经迁移,并且决定您想添加一个昵称到现有的表。

您可以创建一个新的迁移php artisan make:migration alter_users_table_add_nickname

,然后该迁移内insted的使用Schema::create它会利用Schema::table

public function up() 
{ 
    Schema::table('users', function(Blueprint $table) 
    { 
     $table->string('nickname'); 
    }); 
} 

public function down() 
{ 
    Schema::table('users', function(Blueprint $table){ 
     $table->dropColumn('nickname'); 

    }); 
} 

您可以在Creating Columns

+0

对,我已经覆盖了。但是,在这种特殊情况下,我应该问,如何协调我的存储库中的新迁移文件和服务器上的文件。也许这与将生产分支与我的本地分支进行同步一样简单,这样这些文件就是如此。 –

+0

那么,一个快速的解决办法是导出您的生产数据库的内容,而不是结构。删除这些表并运行部署伪造以重新运行用编辑的迁移进行的迁移,然后再导入数据。但是,我会建议检查您原来的迁移所在的提交并按照上述步骤操作。 – Anderscc

+1

好的,根据您的最后一句话,我需要将生产同步回本地,以便这些迁移再次相同。我会这样做并跟进并标记你的答案。谢谢! –