Laravel 使用数据库中的空数据从可空迁移到非空
Laravel migration from nullable to not null with null data in database
我下面的代码工作正常。问题是当我在 user_id 字段中获得数据库中的空数据时。迁移回滚不会成功通过。解决这个问题的好方法是什么?
在回滚中将 nullable 更改为 false 之前,我是否应该将 user_id 列中的每个 null 更改为空字符串?
public function up()
{
Schema::table('classes', function (Blueprint $table) {
$table->text('user_id')->nullable()->change();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('classes', function (Blueprint $table) {
$table->text('user_id')->nullable(false)->change();
});
}
这个问题以前出现过,除了在更改列之前将值更新为空字符串外,我找不到其他解决方案,数据库引擎总是会抱怨。
已更新:
你可以这样做并且应该工作:
use Illuminate\Support\Facades\DB;
/*
*
* Some code
*
*/
public function up()
{
DB::table('classes')->whereNull('user_id')->update(['user_id'=>'']);
Schema::table('classes', function (Blueprint $table) {
$table->text('user_id')->nullable()->change();
});
}
我下面的代码工作正常。问题是当我在 user_id 字段中获得数据库中的空数据时。迁移回滚不会成功通过。解决这个问题的好方法是什么? 在回滚中将 nullable 更改为 false 之前,我是否应该将 user_id 列中的每个 null 更改为空字符串?
public function up()
{
Schema::table('classes', function (Blueprint $table) {
$table->text('user_id')->nullable()->change();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('classes', function (Blueprint $table) {
$table->text('user_id')->nullable(false)->change();
});
}
这个问题以前出现过,除了在更改列之前将值更新为空字符串外,我找不到其他解决方案,数据库引擎总是会抱怨。
已更新:
你可以这样做并且应该工作:
use Illuminate\Support\Facades\DB;
/*
*
* Some code
*
*/
public function up()
{
DB::table('classes')->whereNull('user_id')->update(['user_id'=>'']);
Schema::table('classes', function (Blueprint $table) {
$table->text('user_id')->nullable()->change();
});
}