将 Laravel 查询生成器方法 whereIn() 与子查询一起使用

Using Laravel query builder method whereIn() with sub query

我正在使用 Laravel 5.3 开发 Web 应用程序。我现在遇到 Laravel 查询生成器方法 whereIn.

的问题

我有table这样的。

student - id, name, dob
course - id, code
student_course -  student_id, course_id

我想做的是让学生通过 student_course table 的 course_id 搜索而不加入任何 table。手动查询,我喜欢这样

SELECT * FROM `student` WHERE `student`.`id` IN (SELECT `student_id` FROM `student_course` WHRE `course_id`= ?) 

所以现在当我尝试将其转换为 Laravel 查询生成器时,我遇到了问题。这是我的代码:

DB::table('student')->whereIn('id',[ "Here I want to run sub query" ])->get();

正如您在 whereIn() 的第二个参数中看到的那样,我遇到了问题。在这种情况下,我需要 运行 原始查询吗?我怎样才能 运行 原始查询作为第二个参数?如果没有,我如何才能像上面那样在一个查询中按 course_id 过滤而不加入任何 table?

参考这个

 $courseId = 1;

 $data = DB::table('student')->whereIn('id',function($query) use (courseId){
    $query->select('student_id')
            ->from('student_course')->where('course_id', '=',$courseId);
})->get();

你可以这样做:

DB::table('student')
    ->whereRaw("id IN (SELECT `student_id` FROM `student_course` WHERE `course_id`= ?)", [$course_id])
    ->get();

如果你想通过模型,你可以使用:

$res = Student::whereIn('id',StudentCourse::where('course_id',$course_id)->pluck('student_id')->toArray())->get();

谁使用查询生成器:

$data = DB::table('student')
->whereIn('id',DB::table('student_course')
->where('course_id','=',$courseId)
->pluck('student_id')
->toArray())
->get();