如何将获取活跃参与者用户信息的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
相关产品推荐
相关产品推荐

