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

Laravel 10 Eloquent查询为何出现`radio_content_products`.`id` IS NULL条件?

问题分析与解决

问题原因

你在循环中错误调用了$this->product(),而非当前循环项$content->product()。这里的$this指向执行get()的原模型实例(或查询构造器上下文),该实例的关联外键字段为空,Laravel构建关联查询时,会自动基于当前模型的外键值生成条件——当外键为空时,就会追加radio_content_products.id is null的限制。你手动添加的where('id', '=', $content->content_product_id)是额外条件,最终SQL便同时包含了这两个部分。

解决方案

将循环内的$this->product()替换为$content->product(),这样会基于每个$content实例的关联字段构建正确查询,不会出现多余的is null条件:

$contentList = $this->get();
foreach($contentList as $content){
    $content->product()->where('id', '=', $content->content_product_id)->ddRawSql();
}

额外优化建议

如果content_product_id是content模型与product模型关联的外键,你完全不需要手动编写where条件。直接调用关联属性(注意是属性而非方法)即可获取对应产品,Laravel会自动处理查询逻辑:

$contentList = $this->get();
foreach($contentList as $content){
    // 获取关联的产品模型
    $product = $content->product;
    // 若需查看生成的SQL,可调用关联方法:
    // $content->product()->ddRawSql();
}

内容的提问来源于stack exchange,提问作者michael-mammut

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 01:52:09