如何在Laravel数据库迁移中使用alter table添加字段?

5

我使用的是 Laravel 5.3

我的迁移文件如下:

<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateUsersTable extends Migration
{
    public function up()
    {
        Schema::create('users', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name');
            $table->string('api_token')->nullable();
            $table->string('email',100)->unique();
            $table->string('password')->nullable();
            $table->string('avatar',100)->nullable();
            $table->string('full_name',100)->nullable();
            $table->date('birth_date')->nullable();
            $table->smallInteger('gender')->nullable();
            $table->timestamps();
            $table->softDeletes();
        });
    }
    public function down()
    {
        DB::statement('SET FOREIGN_KEY_CHECKS = 0');
        Schema::dropIfExists('users');
        DB::statement('SET FOREIGN_KEY_CHECKS = 1');
    }     
}

我想添加一个像这样的新字段:

$table->string('mobile_number',20)->nullable();

但我不想在模式上添加它。 我想使用alter table 在我的演示服务器和生产服务器上设置了自动迁移
因此,如果我使用alter table,则会自动迁移。 因此,在代码合并到开发或主分支时,在数据库中的表将自动添加mobile_number字段
如果我在模式上添加,则不会自动迁移
如何使用alter table添加字段?
2个回答

10

您可以使用模式来更新现有的表。使用Artisan命令创建一个新的迁移,然后添加类似以下内容:

您可以使用模式来更新现有的表。使用Artisan命令创建一个新的迁移,然后添加类似以下内容:

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

如果你真的想要执行原生的 SQL,可以尝试以下方法:

DB::statement("ALTER TABLE users .....");

然而,如果你能让它正常工作,模式方式会更好。


如果使用“alter table”,该怎么做呢?也许您可以更新您的答案。因此有两个选择。 - moses toh
@SuccessMan 更新后加入了一种原始的方法来完成它,但模式方式应该能够满足您的需求。 - Chris Phillips
好的。谢谢你的帮助。 - moses toh

9
在命令行中,执行artisan命令为您的表添加新的迁移:
php artisan make:migration add_mobile_number_to_users_table --table=users

然后你可以将你的代码放到新创建的迁移文件中:

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接