Eloquent:查询whereHas模型计数大于

时间:2017-04-30 13:29:16

标签: laravel eloquent

我得到了以下内容:

  • 用户,角色,使用role_user数据透视表和belongsToMany 关系

  • 用户,位置,包含location_user数据透视表和belongsToMany 关系

用户有两个角色:所有者&工人

位置有'workers_max'字段

我尝试构建一个查询,以获取'workers_max'大于关联工作者数量的所有位置。

我试过了:

Locations::withCount('workers')->where('workers_max', '>', 'workers_count')->get();

但它会返回所有位置。

2 个答案:

答案 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

只需稍微更改一下查询,您就可以得到想要的东西。

See how to use havingRaw

Difference between where and having