我正在使用Laravel迁移文件来帮助为我的项目设置MariaDB模式。它适用于架构的初始表设置,但是在创建它之后,如何(如果可能的话)如何向迁移文件中添加一个字段,并在数据库中仅创建一个字段而不会影响任何现有的字段/数据吗?
作为一个例子,假设我有一个up
方法,如下所示:
public function up()
{
Schema::create('test_table', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->timestamps();
});
}
然后我要添加一个desc
字段,如下所示:
public function up()
{
Schema::create('test_table', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('desc')->nullable();
$table->timestamps();
});
}
如果我在添加php artisan migrate
字段后运行desc
,它将按预期运行,还是会弄乱现有的内容?恐怕不知道会发生什么,我想先检查一下。
此外,我尝试查看Laravel文档以找到此问题的答案(https://laravel.com/docs/5.7/migrations),但找不到任何相关内容。
谢谢。
答案 0 :(得分:2)
通常,您应该在添加新字段的地方创建新迁移。方法up
应该看起来像这样:
public function up()
{
Schema::table('test_table', function (Blueprint $table) {
$table->string('desc')->nullable()->after('name');
});
}
请注意,您不是在Schema::create
此处使用Schema::table
来更新现有表。
当然,如果您尚未部署应用程序并且可以从头开始,则可以修改现有迁移,但是如果不确定,最好的方法是在仅修改现有表的情况下创建新迁移。
答案 1 :(得分:0)
您应该在终端运行命令中执行此操作
php artisan make:migration add_desc_field_in_test_table --table=test_table
然后,在up()
文件的migration
函数中,创建字段:
public function up()
{
Schema::table('test_table', function (Blueprint $table) {
$table->string('desc')->nullable();
});
}
它不会弄乱当前表的结构。它将添加在desc
中的列test_table
中。