2017-05-31 16 views
0

我对Laravel中实际使用的迁移感到困惑;请帮我弄清楚一些。我是否需要重建我的整个数据库以进行迁移的单个更改

假设我的所有表格都是通过create_blabla_table.php迁移设置的,现在我决定公司表格不仅需要名称,还需要一个slug列。

SO。我去create_companies_table.php并编辑它:我添加字符串字段slug。

此更改如何通过?我现在需要重置我的整个数据库并重新播种所有表吗?或者我可以更新这张单桌吗?

或者我应该创建一个像add_company_slug_field.php这样的新迁移文件。但是,我将会有很多迁移文件,我可能会失去它的踪迹。

回答

1

你需要做的是产生修改表的新移民,你所希望的方式,然后运行PHP工匠迁移

+0

因此,我可能需要使用alter table语句进行新的迁移? – Floris

+0

是的,你可以做到这一点,然后你就不需要回滚 – GeekSilva

1

如果在迁移更改列,你应该遵循两个步骤

  1. 回滚
  2. 迁移

当您运行命令php artisan migrate:rollback整个迁移将回滚,当您运行php artisan migrate时,所有迁移将在默认情况下迁移,您应该运行播种器。

如果您拥有没有外键约束的独立表,那么您可以通过在迁移表中增加表批号来执行单表迁移。在更改批号之后,只需使用artisan命令回滚并迁移您的表。

对于带有外键的表,应该在子类之前创建父类,因为迁移顺序错误可能会发生一些时间错误。

您还可以通过增加批量值对一组表进行回滚/迁移操作。

用这种方法你可以改变特定的表格。

1

有两种方式其实..首先是

php artisan migrate:rollback

然后更新您的迁移文件..重新运行

php artisan migrate

但会已经清除所有的记录之前,保存在你的数据库中..

,如果你不想用另一种方法是创建

UPDATE column属性

Schema::table('users', function (Blueprint $table) { 
    $table->string('name', 50)->nullable()->change(); 
}); 

重命名列

Schema::table('users', function (Blueprint $table) { 
    $table->renameColumn('from', 'to'); 
}); 

删除一个新的迁移COLUMN

Schema::table('users', function (Blueprint $table) { 
    $table->dropColumn(['votes', 'avatar', 'location']); 
}); 

新列

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

然后有一个捷径,但不是一个好的做法 ..更新您的迁移文件..然后手动更新数据库..

相关问题