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

