如何创建迁移以在eloquent中为枚举添加值

use*_*986 19 enums laravel eloquent

我有一个包含枚举字段的表

CREATE TABLE `user_status` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `values` enum('on', 'off'),
  PRIMARY KEY (`id`),
) ENGINE=InnoDB;
Run Code Online (Sandbox Code Playgroud)

如何创建迁移以向枚举字段添加值?

Ale*_*ski 51

Laravel不提供更新枚举列的方法.您可以删除并重新创建列,但在操作期间可能会丢失数据并且它不是很干净.

在这种情况下,我认为最好的选择是将原始SQL写入迁移:

public function up()
{
    DB::statement("ALTER TABLE user_status MODIFY COLUMN values ENUM('on','off','unknown')");
}

public function down()
{
    DB::statement("ALTER TABLE user_status MODIFY COLUMN values ENUM('on','off')");
}
Run Code Online (Sandbox Code Playgroud)

我可能在SQL语法中犯了一个错误,我从未使用过ENUM,但无论如何你都可以看到这个想法.

  • 请注意,您只能使用此解决方案支持支持ENUM类型的数据库.例如,使用SQLite运行测试将会中断. (4认同)

lar*_*mil 5

我用 MySql 做到了:

class ChangeJobTypeEnum extends Migration {

    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        DB::statement("ALTER TABLE _TABLENAME_ CHANGE _COLUMNNAME_ _COLUMNNAME_ ENUM('on', 'off', 'auto')");

    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        DB::statement("ALTER TABLE _TABLENAME_ CHANGE _COLUMNNAME_ _COLUMNNAME_ ENUM('on', 'off')");

    }
}
Run Code Online (Sandbox Code Playgroud)