【问题标题】:Laravel migration from nullable to not null with null data in databaseLaravel 从可空迁移到非空,数据库中有空数据
【发布时间】:2021-08-24 13:43:33
【问题描述】:

我下面的代码运行良好。问题是当我在数据库中获取 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();
        });
    }

【问题讨论】:

    标签: laravel migration nullable


    【解决方案1】:

    这个问题以前出现过,除了在更改列之前将值更新为空字符串,我找不到其他解决方案,数据库引擎总是会抱怨。


    更新:

    您可以这样做并且应该可以:

    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();
        });
    }
    

    【讨论】:

    • 好的,非常感谢您的回答。 DB::statement(raw_sql) 是一个很好的解决方案,或者你可能有更好的解决方案?
    • 是的,你可以这样做,刚刚更新了我的答案。
    • 非常感谢,您的解决方案比原始 sql 更好
    猜你喜欢
    • 2019-05-29
    • 2018-11-01
    • 2014-04-13
    • 1970-01-01
    • 2015-03-04
    • 1970-01-01
    • 2014-02-13
    • 2021-01-10
    • 1970-01-01
    相关资源
    最近更新 更多