php - Laravel:迁移文件是否只在迁移和回滚之间运行一次?
问题描述
在 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
得到我的修改?但在最后的命令中,数据会丢失,我不希望这种情况发生。
解决方案
这个答案有两个部分。
只要您仍处于开发阶段:是的,您可以随意编辑您的迁移并来回滚动,直到您对结果感到满意为止。
一旦您的迁移在其他地方(例如生产系统)执行:您永远不应该再次更改该迁移。这里的重点是要有一个可以重放结构变化的机制。Laravel 使用了一个非常简单的“我是否已经运行了这个迁移?” - 功能来查看它仍然需要为该数据库运行迁移的哪些部分。因此,以后将永远不会再运行相同的迁移。
TL;DR:对于你的问题
我应该为每个修改创建一个新的迁移文件吗
可以说:是的!
推荐阅读
- visual-studio-code - Vs代码未在颤动中显示小部件结束注释
- javascript - 控制层中的传单清洁复选框
- r - 如何在 R 中分组排序这个数据框?
- c++ - 如何定义运算符重载函数来比较来自两个不同类的两个对象?
- javascript - 在 Angular 中的单击和显示场景中使用集合 - Angular 与 Blazor 方法
- node.js - Mongoose FindByIdAndUpdate 的奇怪行为 - 为什么它删除文档而不是更新?
- direct3d12 - D3D12 功能级别 12_2/终极其他功能
- mongodb - 在 MongoDB 聚合中使用 $push 合并对象
- react-native - React Native Expo Animated _reactNative.Animated.interpolate 不是函数
- javascript - 检查可能不存在的会话变量