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
相关产品推荐
相关产品推荐

