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

Laravel迁移报错:1068 Multiple primary key defined 求助

问题原因

你遇到的错误是因为迁移代码里同时定义了两组主键:

  • $table->id(); 会自动生成一个名为id的自增主键字段,这是Laravel的默认主键配置。
  • 后续你又通过$table->primary(['userId', 'productId']);设置了联合主键,导致单表存在多个主键定义,触发SQL语法冲突。
解决方法

移除默认的自增主键$table->id();,保留联合主键即可,同时可以简化外键的定义写法:

public function up()
{
    Schema::create('wishlists', function (Blueprint $table) {
        // 用户外键,简化写法
        $table->foreignId('userId')
              ->constrained('users')
              ->onDelete('cascade');

        // 商品外键,简化写法
        $table->foreignId('productId')
              ->constrained('products')
              ->onDelete('cascade');

        // 设置联合主键,确保同一用户对同一商品只能添加一次心愿单
        $table->primary(['userId', 'productId']);

        $table->timestamps();
    });
}
补充说明
  • 联合主键userId + productId可以保证同一条用户-商品组合不会重复插入,完全符合心愿单的业务逻辑。
  • foreignId()->constrained()是Laravel提供的简化语法,自动关联对应表的id字段,效果等价于你原来手动编写的foreign()->references()代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 11:37:12