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

Laravel同一模型关联添加2个查询条件不生效如何解决?

问题根因

原有写法失效的核心原因:Laravel 执行 with 预加载逻辑时,关联方法会在查询A模型数据之前完成初始化,此时 $this 指向的是未加载任何行数据的A模型空实例,$this->L_ID 无法取到具体的字段值,生成的SQL语句中相当于 where L_ID = null,关联自然无法匹配到数据。

解决方案

你需要实现的是B表L_ID和A表L_ID字段值匹配,属于跨表字段比对场景,直接使用Laravel提供的whereColumn方法即可,该方法会直接在SQL层面生成字段相等的查询条件,不需要依赖模型实例属性:

class A extends Model
{
    public function test() {
        return $this->hasMany(B::class,'TYPE_ID','TYPE_ID')
            // 此处替换为你A、B模型对应的实际数据表名,避免字段冲突
            ->whereColumn('b表表名.l_id', 'a表表名.l_id');
    }    
}
补充说明

如果你的关联条件不是跨表字段比对,而是需要依赖单个A模型的动态属性,这种场景不支持with预加载,只能在已经查询得到单个A模型实例后,使用懒加载方式获取关联数据:

// 先查询得到A实例,此时实例已加载对应行的L_ID值
$a = A::find(1);
// 调用关联时可以正确获取匹配条件的关联数据
$testData = $a->test;

内容的提问来源于stack exchange,提问作者PD Chanel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 11:06:04