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

Laravel Eloquent如何实现匹配全部指定ID的精准查询?

如何用Laravel Eloquent筛选包含所有指定关联ID的记录?

你当前用whereIn结合whereHas的写法,只会返回至少关联一个指定公司ID的记录,这就是为什么你得到了ID为2和3的结果。要筛选出同时关联所有指定公司ID的记录,有两种可行方案:

方案一:循环叠加whereHas约束

你自己尝试的循环写法是有效的,原理是每次调用whereHas都会给查询添加一个约束,要求模型必须关联对应ID的公司,多次叠加后就会强制模型满足所有关联条件:

foreach($companyIds as $id) {
    $query->whereHas('companies', function($query) use($id) {
        $query->where('company_id', $id);
    });
}

注意:要确保代码里的关联方法名(比如companies)和模型中实际定义的关联方法名一致。

方案二:用whereHas的计数约束(更高效)

如果$companyIds数组元素较多,循环生成多个子查询会影响性能,这时可以用whereHas的第三个参数直接指定关联记录的数量要求:

->whereHas('companies', function($query) use($companyIds) {
    $query->whereIn('company_id', $companyIds);
}, '=', count($companyIds))

这个写法的逻辑是:先筛选出关联公司ID在指定数组中的记录,然后要求这些关联记录的数量恰好等于指定ID的总数,这样就能保证模型关联了所有指定的公司ID(如果少关联一个,计数就会小于数组长度)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 20:10:02