我的数据库中有一个用户表:
$table->increments('id');
$table->string('fullName');
$table->string('email')->unique();
$table->string('password', 50);
$table->enum('role',['boss','employee','customer'])->default('customer');
$table->rememberToken();
$table->timestamps();
我需要将'role'列类型更改为'text',然后在Laravel中运行新的迁移。如果我想对以前的数据没有影响,那么最好的方法是什么。
答案 0 :(得分:4)
就像下面一样简单,用这一行创建一个新的迁移。请注意->change()
函数,它使其成为ALTER查询。
Schema::table('usertable', function (Blueprint $table) {
$table->string('role')->default('author')->change();
});
请记住,默认情况下string()的大小为255,如果您的枚举值大于该值,则会将枚举值截断为255个字符。
<强>更新强>
您需要安装doctrine/dbal
才能使用Laravel Migration - Modify Columns
要安装doctrine / dbal,请执行composer require doctrine/dbal
注意:目前不支持修改表中也包含enum类型列的任何列。
答案 1 :(得分:2)
您可以尝试:
现在只需按原样更改数据库架构:
$table->increments('id');
$table->string('fullName');
$table->string('email')->unique();
$table->string('password', 50);
$table->string('role');
$table->rememberToken();
$table->timestamps();
基本上,您将角色值复制到(临时)列并重命名。至少它是安全的,并且不会花费很多时间。