I'm trying to add an enum option to a table (without losing the current dataset) using the schema builder.

The only thing I've really been able to find about column alteration is http://www.flipflops.org/2013/05/25/modify-an-existing-database-column-in-a-laravel-migration/ and I believe that was written for Laravel3.

尽管如此,我还是try 使用DB::query('ALTER TABLE…');命令,但它与call_user_func_array()一起出错.该命令要求参数1是有效的回调,类'illumb\Database\MySqlConnection'没有方法'query'.

DB::query("ALTER TABLE users CHANGE COLUMN permissions permissions ENUM('admin', 'user', 'candidate')");

我也试过这样做:

Schema::table('users', function ($table) {
    $table->enum('permissions', array('admin', 'user', 'candidate'))->default('user');
});

but it errors out saying the column already exists.

在不丢失该列中的所有数据的情况下完成我正在try 的操作的最佳方式是什么?

推荐答案

Use the DB::statement method:

DB::statement("ALTER TABLE users CHANGE COLUMN permissions permissions ENUM('admin', 'user', 'candidate') NOT NULL DEFAULT 'user'");

Laravel相关问答推荐

Laravel使用PostgreSQL显示";`try 读取null`上的属性,而不是SQL错误消息

Laravel mail send Amazon SES不再支持TLS 1.0和TLS 1.1连接

API GET 请求得到与数据库记录不同的结果

Laravel 5 - 更改模型文件位置

在 laravel 5.3 中截断的错误日志(log)

如何在 Laravel 的外部 js 文件中包含 csrf_token()?

Laravel 中间件返回(try 获取非对象的属性 headers)错误

如何在 laravel 中使用 str_replace

laravel url 验证变音符号

在 laravel 查询构建器中使用多个 where 子句

Laravel 5.5 类型错误:传递给 Illuminate\Auth\EloquentUserProvider::validateCredentials() 的参数 1 必须是实例

在 Laravel 中生成随机数

约定表名(带下划线)

laravel 4:更新行时如何从列的当前值中减一?

如何重定向到laravel上的公共文件夹

Laravel:验证 json 对象

Laravel 迁移 - 删除列

控制器中的artisan调用输出?

Laravel 中的 isDirty() 是什么意思?

如何使 Laravel (Blade) 文本字段只读