Laravel Eloquent:withCount关联计数与模型属性比较查询问题
解决方案
首先纠正你代码里的笔误:模型属性是requested_participants,但你写的是requested_resources,这个错误会导致字段不存在,先修正这个。
接下来,问题出在having方法的参数处理上:当你传入字符串'requested_participants'时,Laravel会将其视为字面量字符串而非数据库字段,数据库会尝试把participants_count和字符串值比较,而非字段的数值,因此筛选失效。
你可以通过以下两种方式解决:
方法一:使用havingRaw直接编写SQL表达式
Timeslot::withCount('participants') ->havingRaw('participants_count < requested_participants') ->get();
方法二:用DB::raw包裹字段名
Timeslot::withCount('participants') ->having('participants_count', '<', \DB::raw('requested_participants')) ->get();
原理说明
havingRaw允许你直接传入原生SQL条件,让数据库正确识别requested_participants为表字段;而DB::raw则会告诉Laravel不要对该参数进行转义,直接作为字段名处理,这样就能实现participants_count(关联计数)和requested_participants(模型字段)的数值比较。
内容的提问来源于stack exchange,提问作者GusgusLucifere
相关产品推荐
相关产品推荐

