我得到了以下内容:
用户,角色,使用role_user数据透视表和belongsToMany 关系
用户,位置,包含location_user数据透视表和belongsToMany 关系
用户有两个角色:所有者&工人
位置有'workers_max'字段
我尝试构建一个查询,以获取'workers_max'大于关联工作者数量的所有位置。
我试过了:
Locations::withCount('workers')->where('workers_max', '>', 'workers_count')->get();
但它会返回所有位置。
答案 0 :(得分:0)
<强>更新强>
似乎withCount()
的结果不能在where子句中使用,因为它是一个聚合函数。我想你将不得不使用Join。
如果你不想加入,你可以做一些非常糟糕的事情。加载所有这些,workers_count
将可用,然后像这样过滤集合
$locations = Locations::withCount('workers')->get();
$goodLocations = $locations->filter(function($location, $key){
return $location->workers_max > $location->workers_count;
});
正如我所说的,不是最好的解决方案,但我认为这可以完成工作,只要收集不是很大。
为了提高效率,您必须使用Join
答案 1 :(得分:0)
尝试使用Laravel查询记录查看查询,您会注意到withCount()
正在使用where
查询结果。如果要过滤聚合,则需要使用having
。
只需稍微更改一下查询,您就可以得到想要的东西。