You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何筛选拥有偶数个hasMany关联记录的User模型?

实现方案说明

首先解答你的疑问:不能直接用whereHas结合%2取余实现需求

  • whereHas() 方法的核心作用是筛选「存在符合条件的关联记录」的父模型,它的闭包参数是用于过滤单条关联记录的,无法直接对关联的总数量做取余判断。

推荐实现方案(性能最优,SQL层面直接过滤)

使用 withCount() 搭配 havingRaw() 实现,这个方案是Laravel生态通用的关联计数筛选方案:
假设你的User模型定义的hasMany关联名为posts(替换成你自己的实际关联名即可),代码如下:

User::withCount('posts')
    // 直接对关联计数做奇偶判断,等于0对应偶数
    ->havingRaw('posts_count % 2 = 0')
    ->get();
  • 说明:withCount('关联名') 会自动给查询结果附加一个{关联名}_count的字段,存储该用户对应的关联记录总数,再通过havingRaw执行取余运算筛选出总数为偶数的记录即可。

替代方案(仅适合小数据量场景)

如果你的数据量很小,也可以先查询出所有用户的关联计数,再通过集合在PHP层面过滤:

$users = User::withCount('posts')
    ->get()
    ->filter(fn ($user) => $user->posts_count % 2 === 0);
  • 该方案会先查询出所有用户的关联计数再过滤,数据量大时会有严重性能问题,不推荐生产环境使用。

内容的提问来源于stack exchange,提问作者Patrycja

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 09:27:02