Laravel多态关联报错:未知列assignmentable_id问题求助
问题分析与修复方案
嘿,我一眼就瞅出问题出在哪了——你在User和Team模型里的morphMany调用参数完全写错啦!
错误根源
morphMany方法的第一个参数应该是多态关联的目标模型(也就是你的AssignmentAllocation),而不是模型自身。你现在写的$this->morphMany('App\Models\User', 'assignmentable'),Laravel会误以为users表本身存着多态关联字段(assignmentable_id和assignmentable_type),但这俩字段明明在assignment_allocations表里,这就直接导致了那个离谱的SQL查询错误。
修正后的模型代码
User.php
public function assignments() { // 第一个参数是关联的AssignmentAllocation模型,第二个是多态关联的名称 return $this->morphMany('App\Models\AssignmentAllocation', 'assignmentable'); }
Team.php
public function assignments() { // 注意命名空间要统一,你之前写的App\Model\Team应该是笔误,改成App\Models\Team哦 return $this->morphMany('App\Models\AssignmentAllocation', 'assignmentable'); }
AssignmentAllocation.php(这个是对的,不用修改)
public function assignmentable() { return $this->morphTo(); }
验证关联用法
现在你就能正常调用关联逻辑了:
// 获取某用户的所有作业分配 $user = User::find(1); $userAssignments = $user->assignments; // 获取某团队的所有作业分配 $team = Team::find(1); $teamAssignments = $team->assignments; // 反向查询:从作业分配获取对应的用户/团队 $allocation = AssignmentAllocation::find(1); $assignedTo = $allocation->assignmentable; // 会返回User或Team实例
额外提一句,要是你的项目是标准Laravel结构,记得把Team模型的命名空间从App\Model\Team改成App\Models\Team,避免命名空间匹配错误。
内容的提问来源于stack exchange,提问作者user8116198
相关产品推荐
相关产品推荐

