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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:52:32