我正在使用Laravel 5.3开发Web应用程序。我现在遇到了Laravel查询构建器方法的问题,其中。这是我的情景:
我有这样的表格。
student - id, name, dob
course - id, code
student_course - student_id, course_id
我想做的是想让学生通过student_course table的course_id进行搜索,而无需加入任何表格。在手动查询中,我喜欢这样。
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过滤而不加入任何表格?
答案 0 :(得分:3)
参考此
$courseId = 1;
$data = DB::table('student')->whereIn('id',function($query) use (courseId){
$query->select('student_id')
->from('student_course')->where('course_id', '=',$courseId);
})->get();
答案 1 :(得分:0)
你可以这样做:
DB::table('student')
->whereRaw("id IN (SELECT `student_id` FROM `student_course` WHERE `course_id`= ?)", [$course_id])
->get();
答案 2 :(得分:0)
如果您想要通过模型,可以使用:
$res = Student::whereIn('id',StudentCourse::where('course_id',$course_id)->pluck('student_id')->toArray())->get();
答案 3 :(得分:0)
谁使用查询构建器
$data = DB::table('student')
->whereIn('id',DB::table('student_course')
->where('course_id','=',$courseId)
->pluck('student_id')
->toArray())
->get();