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

如何将获取活跃参与者用户信息的MySQL查询转为Laravel Eloquent写法?

Laravel Eloquent 转换方案:活跃参与者用户信息查询

需求:从participants表筛选出活跃(active = 1)的参与者,获取这些参与者在users表中的name和age字段。

原生MySQL查询:

SELECT name, age
FROM users
WHERE id IN (
    SELECT user_id
    FROM participants
    WHERE active = 1
)

两种Eloquent实现方式:

1. 子查询方式(与原生SQL逻辑完全对应)

直接补全你写的代码片段,用闭包生成子查询:

User::whereIn('id', function ($query) {
    $query->select('user_id')
          ->from('participants')
          ->where('active', 1);
})->select('name', 'age')->get();

这个写法和原生SQL的IN子查询逻辑完全一致,通过select('name', 'age')指定只查询需要的字段,避免冗余数据。

2. 关联查询方式(更符合Eloquent思维)

如果User和Participant模型已经定义关联关系,用whereHas筛选更直观:
先在User模型中定义关联:

// app/Models/User.php
public function participant()
{
    return $this->hasOne(Participant::class, 'user_id');
}

再执行查询:

User::whereHas('participant', function ($query) {
    $query->where('active', 1);
})->select('name', 'age')->get();

这种方式利用Eloquent的关联机制,清晰表达“存在活跃参与者记录的用户”这一逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 03:34:59