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

如何在Laravel中为表字段添加外键关联并编写对应迁移?

错误原因
  • Laravel 框架中 $table->id() 方法默认生成的是 无符号大整型(unsigned bigint) 类型的主键,你在accounts表中定义的currency字段为普通整型(int),外键字段和关联主键的字段类型不匹配,就会触发150号外键格式错误。
  • 额外检查项:需要保证currencies表的迁移执行顺序早于accounts表的外键添加迁移,否则关联时找不到目标表也会触发同类错误。
解决方法

场景1:还未执行初始迁移(两张表都未创建)

直接修改accounts表的创建迁移代码,调整currency字段类型即可:

public function up()
{
    Schema::create('accounts', function (Blueprint $table) {
        $table->id();
        $table->string('label', 255);
        // 调整字段类型和currencies.id保持一致
        $table->unsignedBigInteger('currency');

        // 可直接在此处定义外键
        $table->foreign('currency')
            ->references('id')
            ->on('currencies')
            ->onUpdate('cascade');
    });
}

场景2:已经执行过初始迁移(表已存在,需单独写修改迁移)

先修改currency字段类型,再添加外键约束:

public function up()
{
    Schema::table('accounts', function (Blueprint $table) {
        // 先修改字段类型
        $table->unsignedBigInteger('currency')->change();
        
        // 再添加外键约束
        $table->foreign('currency')
            ->references('id')
            ->on('currencies')
            ->onUpdate('cascade');
    });
}

注意:如果accounts表中已经存在数据,需要先确保currency字段的所有现有值都在currencies表的id字段中存在,否则外键约束创建会失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 10:24:03