php Laravel -迁移到现有表列上添加可空属性

fnatzsnv  于 2023-06-20  发布在  PHP
关注(0)|答案(1)|浏览(95)

我已经开始在Laravel 10上写一个小的个人项目。我遇到的问题如下:
1.我有用户表,其中有外部UUID - role_id。
1.我想在不删除表的情况下向该列添加nullable。
1.我已经创建了新的迁移以便进行更改。
1.安装了doctrine/dbal包,以便能够(理论上)改变列。
1.我在迁移中的代码是:

public function up(): void
    {
        Schema::table('users', function (Blueprint $table) {
            $table->foreignUuid('role_id')->nullable()->constrained('roles')->change();
        });
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::table('users', function (Blueprint $table) {
            $table->foreignUuid('role_id')->nullable(false)->constrained('roles')->change();
        });
    }

但是当我运行php artisan migrate时,我得到以下错误- SQLSTATE[42 S21]:列已存在:1060重复的列名'role_id'(Connection:mysql,SQL:alter table users add role_id char(36)null)。
将非常感谢任何建议,如何正确地做修改的列。

t2a7ltrp

t2a7ltrp1#

您可以尝试以下操作:

Schema::table('users', function (Blueprint $table) {
            $table->char('role_id', 36)->nullable()->constrained('roles')->change();
        });

或者使用原始SQL语句,如:

DB::statement('ALTER TABLE users MODIFY role_id CHAR(36) NULL');
    DB::statement('ALTER TABLE users ADD CONSTRAINT fk_users_role_id FOREIGN KEY (role_id) REFERENCES roles (id)');

相关问题