在 laravel 迁移问题中设置默认值

Setting default value in laravel migration issue

在我的 laravel 应用程序中,我有两个 table 称为用户,stat_user。

在我的 stat_user table 中,我需要添加一个名为 added_by 的新列。

added_by 是外键。

added_by 的默认值,必须是用户 table 的 ID。

如何编写我的迁移文件来完全满足我添加额外列的需求。

这是我到目前为止所做的...我正在努力添加该默认值...

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class AddAddedByToCertificateUserTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::table('stat_user', function (Blueprint $table) {
            $table->unsignedBigInteger('added_by')->after('user_id');
            $table->foreign('added_by')->references('id')->on('users');
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::table('cstat_user', function (Blueprint $table) {
            $table->dropColumn('added_by');
        });
    }
}
 

好的,添加具有关系的新列会导致旧记录出现问题,因此我们需要先创建它nullable

  Schema::table('stat_user', function (Blueprint $table) {
            $table->unsignedBigInteger('added_by')->nullable()->after('user_id');
            $table->foreign('added_by')->references('id')->on('users');
        });

那么我们可以运行下面的查询来设置旧记录的默认值

\DB::statement('UPDATE stat_user SET added_by = user_id');

您也可以将它们合并到同一个迁移文件中

public function up()
    {
        //
        Schema::table('stat_user', function (Blueprint $table) {
                $table->unsignedBigInteger('added_by')->nullable()->after('user_id');
                $table->foreign('added_by')->references('id')->on('users');
            });
        
        \DB::statement('UPDATE stat_user SET added_by = user_id');
                        
    }