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

