为现有表列添加可为空属性的Laravel迁移
P粉674757114
P粉674757114 2023-09-05 12:58:02
0
1
497
<p>我已经开始在Laravel 10上编写一个小的个人项目。我遇到的问题如下:</p> <ol> <li>我有一个用户表,其中有一个外键UUID - role_id。</li> <li>我想在该列上添加nullable属性,而不需要删除表。</li> <li>我创建了一个新的迁移来进行修改。</li> <li>安装了doctrine/dbal包,以便(理论上)更改列。</li> <li>我在迁移中的代码如下:</li> </ol> <pre class="brush:php;toolbar:false;">public function up(): void { Schema::table('users', function (Blueprint $table) { $table->foreignUuid('role_id')->nullable()->constrained('roles')->change(); }); } /*** 反转迁移。*/ public function down(): void { Schema::table('users', function (Blueprint $table) { $table->foreignUuid('role_id')->nullable(false)->constrained('roles')->change(); }); }</pre> <p>但是当我运行php artisan migrate时,我得到了以下错误 - SQLSTATE[42S21]: Column already exists: 1060 Duplicate column name 'role_id' (Connection: mysql, SQL: alter table users add role_id char(36) null)。</p> <p>非常感谢任何关于如何正确修改列的建议。</p>
P粉674757114
P粉674757114

全部回复(1)
P粉068486220

您可以尝试以下操作:

      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)');

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板