我已经阅读了几个有关此问题的主题,但仍然不是我的问题。
所以在users
表中我有一个名为role
的列,它是枚举类型,有两个可用值:1和2.我将2设置为默认值。例如,现在我想将其更改为1。我创建了一个新的迁移,运行php artisan migrate
并遇到此错误:
[Illuminate\DatabaseQueryException]
SQLSTATE[42S21]: Column already exists: 1060 Duplicate column name 'role' (SQL: alter table `u
sers` add `role` enum('1', '2') not null default '1')
[PDOException]
SQLSTATE[42S21]: Column already exists: 1060 Duplicate column name 'role'
以下是我的CreateUsersTable迁移文件中的代码:
$table->enum('role', ['1', '2'])->default('2');
我在新的UpdateUsersTable迁移文件中做了同样的事情:
$table->enum('role', ['1', '2'])->default('1');
顺便说一句,我不能使用php artisan migrate:refresh
,因为它会删除我的所有数据。我在哪里做错了?
答案 0 :(得分:2)
$table->enum('role', ['1', '2'])->default('1')->change();
答案 1 :(得分:1)
<?php
use Illuminate\Support\Facades\DB;
use Illuminate\Database\Migrations\Migration;
class UpdateUsersTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
DB::statement('ALTER TABLE `users` MODIFY `role` DEFAULT 1;');
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
DB::statement('ALTER TABLE `users` MODIFY `role` DEFAULT 2;');
}
}
答案 2 :(得分:1)
要执行此操作,您必须向添加到迁移文件的每个字段添加->nullable()
或->default()
。