如何向表中添加新的 ENUM 值

How to Add a New ENUM Values to Table

提问人:compile_error 提问时间:11/8/2023 最后编辑:compile_error 更新时间:11/8/2023 访问量:59

问:

我想将名为“pending”的新枚举值添加到现有表中,以便枚举为 ['paid', 'unpaid', 'pending', 'free']

phpmyadmin上的表格

所以我尝试在迁移时定义它,我认为当我运行“php artisan migrate”但没有迁移时它会自动更新

迁移文件

那么你能帮我如何添加“待定”的新值吗?

PHP MySQL Laravel 枚举

评论

0赞 Akina 11/8/2023
我想将名为“pending”的新枚举值添加到现有表中,以便枚举为 ['paid', 'unpaid', 'pending', 'free']此类更改需要在 METHOD=COPY 中。为什么不存储现有值排序,也不向值列表末尾添加其他值?但是没有迁移这是什么意思?您创建了迁移文件,但它消失了?你启动它,但它失败了,并出现了一些错误?它不会改变没有错误的结构吗?别的?
0赞 Adi 11/8/2023
请发布您的源代码/错误,并避免发布图片。请参阅 如何询问 。另外,为什么您的迁移文件创建了架构,您不应该使用更改表,因为您正在尝试修改现有表?

答:

1赞 Ali 11/8/2023 #1

您的迁移文件应如下所示

public function up(): void
{
    Schema::table('payment_spps', function (Blueprint $table) {
        $table->enum('January', ['paid', 'unpaid', 'pending', 'free',])->default('unpaid')->change();
        // other columns ...
    });
}

如果它不起作用,你可以试试这个

public function up(): void
{
    Schema::table('payment_spps', function (Blueprint $table) {
        DB::statement("ALTER TABLE payment_spps MODIFY COLUMN `January` ENUM('paid', 'unpaid', 'pending', 'free')");
    });
}


如果要使用它设置默认值

public function up(): void
{
    Schema::table('payment_spps', function (Blueprint $table) {
        DB::statement("ALTER TABLE payment_spps MODIFY COLUMN `January` ENUM('paid', 'unpaid', 'pending', 'free') default('unpaid') ");
    });
}

1赞 Ali RaZa 11/8/2023 #2

创建新的迁移: 运行以下 Artisan 命令以创建新的迁移文件:

php artisan make:migration add_pending_to_status_enum_in_table_name --table=your_table_name

下面是迁移文件中的 up 和 down 方法可能如下所示的示例:

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
use Illuminate\Support\Facades\DB;

class AddPendingToStatusEnumInTableName extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        DB::statement("ALTER TABLE your_table_name MODIFY COLUMN your_enum_column ENUM('paid', 'unpaid', 'pending', 'free')");
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        DB::statement("ALTER TABLE your_table_name MODIFY COLUMN your_enum_column ENUM('paid', 'unpaid', 'free')");
    }
}