【问题标题】:Production migration fresh生产迁移新鲜
【发布时间】:2019-05-05 17:54:00
【问题描述】:

如果我想在生产表中添加新列,它是如何工作的?我知道我在进行迁移时会丢失所有数据:新鲜。

1) 是否可以像我对 fastnetnr 列所做的那样更改迁移并添加新列?

 public function up()
    {
        Schema::create('kontaktforms', function (Blueprint $table) {
            $table->increments('id');
            $table->string('navn');
            $table->string('mobilnr');
            //new fastnetnr column added
            $table->string('fastnetnr')->nullable();
            $table->string('mail');
            $table->string('emne');
            $table->text('beskrivelse');
            $table->timestamps();
        });

2) 还是我必须用 php artisan 添加一个新列,所以输出是这样的?

public function up()
{
    Schema::table('kontaktforms', function($table) {
        $table->string('fastnetnr')->nullable();
    });
}

【问题讨论】:

    标签: php database-migration laravel-5.6


    【解决方案1】:

    从逻辑上讲,您可以按照以下步骤进行操作;

    1. 回滚你的表 php artisan migrate:rollbackphp artisan migrate:rollback --step=1
    2. 编辑您的迁移文件
    3. 回迁php artisan migrate

    但这不是最佳做法,尤其是在生产中。所以你必须创建新的迁移文件来修改表并迁移它。

    创建新的迁移文件

    php artisan make:migration add_fastnetnr_to_kontaktforms_table --table=kontaktforms
    

    并像这样添加新列

    public function up()
    {
        Schema::table('kontaktforms', function (Blueprint $table) {
            $table->string('fastnetnr')->nullable();
        });
    }
    
    
    public function down()
    {
        Schema::table('kontaktforms', function (Blueprint $table) {
            $table->dropColumn('fastnetnr');
        });
    }
    

    并迁移

    php artisan migrate
    

    【讨论】:

    • 如果我不进行 migrate:rollback,而只进行 migrate:fresh 怎么办?它会损坏生产台吗?
    • migrate:fresh 命令将删除所有表并重新运行所有迁移
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-21
    • 1970-01-01
    • 2013-03-17
    • 1970-01-01
    • 1970-01-01
    • 2019-03-24
    相关资源
    最近更新 更多