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

Laravel 10中whereMorph查询报错:未知列'morph',求解决方案

问题排查与解决:Laravel whereMorph 报错 Column not found: morph

错误原因

你调用whereMorph的方式不符合Laravel的方法规范:

  • whereMorph的第一个参数应该是模型中定义的多态关联方法名(即creater),而非数据库字段名creater_type
  • 参数传递错误导致Laravel生成了包含不存在的morph列的SQL语句,触发1054 Unknown column 'morph'错误

解决方法

提供两种可行修复方案,按需选择:

方案一:正确使用whereMorph方法

按照whereMorph标准用法,传入关联方法名、目标模型类,再指定匹配条件:

public function index(): View
{
    $dmUser = dm();
    $data['lams'] = LocalAreaManager::with('creater')
        ->whereMorph('creater', get_class($dmUser), ['id' => $dmUser->id])
        ->latest()
        ->get();
    
    return view('district_manager.lam_management.index', $data);
}

若需复杂查询逻辑,可替换为闭包条件:

->whereMorph('creater', get_class($dmUser), function ($query) use ($dmUser) {
    $query->where('id', $dmUser->id);
})

方案二:直接使用普通where条件组合(更直观)

多态关联本质是{关联名}_id和{关联名}_type两个字段的匹配,直接针对这两个字段写条件更简单不易错:

public function index(): View
{
    $dmUser = dm();
    $data['lams'] = LocalAreaManager::with('creater')
        ->where('creater_type', get_class($dmUser))
        ->where('creater_id', $dmUser->id)
        ->latest()
        ->get();
    
    return view('district_manager.lam_management.index', $data);
}

额外建议

为避免dm()返回null引发错误,建议增加登录状态判断:

public function index(): View
{
    $dmUser = dm();
    $data['lams'] = collect();
    
    if ($dmUser) {
        $data['lams'] = LocalAreaManager::with('creater')
            ->where('creater_type', get_class($dmUser))
            ->where('creater_id', $dmUser->id)
            ->latest()
            ->get();
    }
    
    return view('district_manager.lam_management.index', $data);
}

内容的提问来源于stack exchange,提问作者Shariful European IT

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 15:46:18