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

Laravel中MorphOne关联预加载指定字段返回null问题求助

解决Laravel MorphOne关联仅加载id时返回null的问题

问题的核心原因是:多态关联加载时,必须包含关联匹配所需的外键字段,也就是messageable_id和messageable_type,这两个字段是Laravel用来关联MessageThread和Assignment的关键标识,缺失的话框架无法建立模型间的关联关系,最终返回null。

解决方案

不管是使用字段列表还是闭包查询,都需要在选中的字段中加入messageable_id和messageable_type:

方式1:直接指定字段列表

$assignments = \App\Assignment::where("account_id", $account_id)
    ->with("messageThread:id,messageable_id,messageable_type")
    ->withCount(["logs", "messages"])
    ->paginate(30);

方式2:使用闭包查询

$assignments = \App\Assignment::where("account_id", $account_id)
    ->with(["messageThread" => function ($query) {
        $query->select("id", "messageable_id", "messageable_type");
    }])
    ->withCount(["logs", "messages"])
    ->paginate(30);

原理说明

Laravel处理多态关联时,会通过messageable_type(存储关联模型的类名,比如App\Assignment)和messageable_id(存储关联模型的主键值)这两个字段,将MessageThread实例匹配到对应的Assignment实例。如果查询MessageThread时只选择了id字段,框架没有足够的信息完成匹配,就会将message_thread字段设为null。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 02:57:19