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

Laravel 10多态关联报错:locations.branchable_type列不存在

Laravel 10 多态关联字段不匹配问题排查

问题原因

你用$table->morphs('model')在locations表生成了model_id和model_type两个多态字段,但默认的morph关联规则会根据关联名称自动拼接字段名:

  • Branch模型的morphOne关联如果不指定字段,Laravel会默认查找locations.branchable_type和locations.branchable_id,这和实际表中的model_type/model_id不匹配,导致字段找不到的错误。

修正方案

1. 修正Branch模型的morphOne关联

在Branch模型中,定义关联时明确指定多态关联的名称为model(对应创建表时的morphs参数):

// app/Models/Branch.php
public function location()
{
    // 第二个参数指定多态关联的前缀为model,对应表中的model_type/model_id
    return $this->morphOne(Location::class, 'model');
}

2. 修正Location模型的morphTo关联

在Location模型中,确保morphTo关联指向正确的字段:

// app/Models/Location.php
public function model()
{
    // 明确指定关联类型字段和ID字段,和表中字段对应
    return $this->morphTo(__FUNCTION__, 'model_type', 'model_id');
}

如果你的关联方法名就是model,也可以简化为:

public function model()
{
    return $this->morphTo();
}

Laravel会自动匹配方法名对应的model_type和model_id字段。

验证

修正后执行查询:

$branches = Branch::with('location')->get();

此时Laravel会正确使用locations.model_type = 'App\Models\Branch'和locations.model_id = branches.id作为关联条件,不会再出现字段找不到的错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 17:48:12