You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel迁移报错:重复键名'artisan_services_user_id_index'

问题原因分析

错误提示Duplicate key name 'artisan_services_user_id_index'说明数据库中artisan_services表已经存在名为artisan_services_user_id_index的索引,而某个迁移脚本尝试重复添加该索引。

你提供的创建表迁移脚本中并没有显式添加这个索引,所以问题出在另一个针对artisan_services表的迁移文件中(通常是后续添加的修改表结构的迁移)。

解决步骤

1. 定位问题迁移文件

遍历database/migrations/目录下的所有文件,找到包含以下代码的迁移文件:

Schema::table('artisan_services', function (Blueprint $table) {
    $table->index('user_id');
});

该文件的时间戳会晚于创建artisan_services表的迁移文件。

2. 验证索引是否已存在

在数据库客户端执行以下SQL,确认索引是否已存在:

SHOW INDEXES FROM artisan_services WHERE Key_name = 'artisan_services_user_id_index';

如果返回结果,则说明索引确实已存在。

3. 修改问题迁移文件

针对找到的迁移文件,添加索引存在性检查,避免重复创建:

public function up()
{
    Schema::table('artisan_services', function (Blueprint $table) {
        // 检查索引是否存在,不存在才添加
        if (!$table->hasIndex('artisan_services_user_id_index')) {
            $table->index('user_id');
        }
    });
}

4. 备选方案:重置相关迁移

如果你希望从头开始执行迁移(注意:会丢失表中数据):

  • 手动删除artisan_services表
  • 或者执行回滚命令(替换X为需要回滚的迁移步数):
    php artisan migrate:rollback --step=X
    
  • 然后重新执行迁移:
    php artisan migrate
    

内容的提问来源于stack exchange,提问作者etranz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 13:10:48