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

Laravel如何查询id必须同时包含[1,2,3]的用户,不使用whereIn

需求实现方案

逻辑澄清

关系型数据库中,单条数据的唯一主键id只能存在一个值,不存在「id同时等于1、2、3」的单条用户记录。你描述的需求实际可分为两类常见场景,以下分别给出不含whereIn的实现方案。

场景1:仅当指定id的用户全部存在时,返回这些用户的详情

该场景下要求传入的[1,2,3]三个id对应的用户必须全部存在,只要有一个id查不到就返回空结果,实现代码如下(以Laravel查询构造器为例):

$targetIds = [1,2,3];
$userList = collect();
$allValid = true;

// 逐个校验id是否存在,无缺失时才组装结果
foreach ($targetIds as $id) {
    $user = User::where('id', $id)->first();
    if (empty($user)) {
        $allValid = false;
        break;
    }
    $userList->push($user);
}

// 存在无效id时清空结果
if (!$allValid) {
    $userList = collect();
}

场景2:查询同时关联了所有指定id的对应资源的用户

如果你的需求是查询同时拥有指定id的关联资源的用户(比如同时绑定了id为1、2、3的三个标签/角色的用户),可以用关联分组聚合的方式实现,示例代码如下(以用户和角色的多对多关联为例):

$targetRoleIds = [1,2,3];
$users = User::join('user_role', 'users.id', '=', 'user_role.user_id')
    ->where('user_role.role_id', 1)
    ->where('user_role.role_id', 2)
    ->where('user_role.role_id', 3)
    ->groupBy('users.id')
    ->havingRaw('COUNT(DISTINCT user_role.role_id) = ?', [count($targetRoleIds)])
    ->select('users.*')
    ->get();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 21:18:02