首页 > 解决方案 > Laravel 雄辩的 whereHas() 无法使用 with() 急切加载

问题描述

我正在使用 Laravel 8.0,并且在“with”方法中使用“whereHas”方法。但是“whereHas”方法中的条件不起作用。

$data= static::where('capacity',">=",$adults + $children)->with(['booking_rooms'=>function($q) use($in,$out){
        $q->whereHas('booking',function($qu){
            return $qu->where('is_completed',1);
        });
        $q->where(function($qu) use($in,$out){
            return $qu->where('check_in',"<=",$in)->where('check_out','>=',$out);
        });
        $q->orWhere(function($qu) use($in,$out){
            return $qu->where('check_in',">=",$in)->where('check_out','<=',$out);
        });
        $q->orWhere(function($qu) use($in,$out){
            return $qu->where('check_in',"<=",$in)->where('check_out',">=",$in)->where('check_out','<=',$out);
        });
        $q->orWhere(function($qu) use($in,$out){
            return $qu->where('check_in',">=",$in)->where('check_in',"<=",$out)->where('check_out','>=',$out);
        });
        return $q;
    }])->with(['room_holds'=>function($q) use($in,$out,$key){
        $q->where(function($q) use($in,$out){
            $q->where(function($qu) use($in,$out){
                return $qu->where('check_in',"<=",$in)->where('check_out','>=',$out);
            });
            $q->orWhere(function($qu) use($in,$out){
                return $qu->where('check_in',">=",$in)->where('check_out','<=',$out);
            });
            $q->orWhere(function($qu) use($in,$out){
                return $qu->where('check_in',"<=",$in)->where('check_out',">=",$in)->where('check_out','<=',$out);
            });
            $q->orWhere(function($qu) use($in,$out){
                return $qu->where('check_in',">=",$in)->where('check_in',"<=",$out)->where('check_out','>=',$out);
            });
        });
        $q->where('till',">=",Carbon::now())->where("session_id","<>",$key);
        return $q;
    }])->get();

如何在“whereHas”方法中使条件生效?

标签: phpeloquentlaravel-8

解决方案


推荐阅读