在Laravel项目中,我在创建表迁移文件中编写了以下up():
public function up()
{
Schema::create('employees', function (Blueprint $table) {
$table->increments('id');
$table->timestamps();
});
}
并运行迁移命令:
php artisan migrate
并成功创建了表,然后创建了另一个迁移文件来修改我的表并添加了新列,并编写了以下up():
public function up()
{
Schema::table('employees', function (Blueprint $table) {
$table->string('name');
});
}
并按预期方式成功添加了列。
我的问题是,当我修改最后一个文件以添加新列时
public function up()
{
Schema::table('employees', function (Blueprint $table) {
$table->string('name');
$table->string('address');
});
}
并运行:
php artisan migrate
该命令给了我没有什么可迁移的,所以我应该为每个修改创建一个新的迁移文件,还是运行其中一个命令
php artisan migrate:rollback
或
php artisan migrate:refresh
得到我的修改?但在最后一条命令中,数据将丢失,我不希望发生这种情况。
答案 0 :(得分:1)
此答案分为两部分。
只要您仍在开发中:是的,您可以随意编辑迁移并来回滚动迁移,直到对结果满意为止。
一旦在其他地方(例如生产系统)执行了迁移,:永远不要再更改该迁移。这里的重点是要有一种机制可以重放结构中的更改。 Laravel使用一个非常简单的“我是否已经运行了迁移?”功能来查看它仍必须为该数据库运行迁移的哪些部分。因此,以后将不再运行相同的迁移。
TL; DR:您的问题
我应为每个修改创建一个新的迁移文件
一个人可以说:是的!
答案 1 :(得分:0)
正如ArSen所说的,只要您仍在开发中,您就可以修改migration
文件,例如将它们组合成一个文件,例如
public function up()
{
Schema::create('employees', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('address');
$table->timestamps();
});
}
然后在您的终端机上Laravel Docs
运行 php artisan migrate:fresh
答案 2 :(得分:0)
在本地进行开发时,通常会更新“迁移文件”。 每次更新后,您必须做第一件事或第二件事:
run php artisan migrate:rollback --step=1 WITH OLD VERSION of migration file, after
that change migration file as you wish and run "php artisan migrate" again
或
manually delete record from migrations table, and manually delete all changes that
migration produced (e.g. delete db table) and after that just run "php artisan migrate"