2016-11-29 7 views
2

인 Laravel 5.3을 사용하여 웹 응용 프로그램을 개발 중입니다. 지금은 Laravel 쿼리 빌더 방법에 문제가 있습니다. whereIn. 여기에 내 시나리오가있다 :Laravel 쿼리 빌더 메서드 사용 where() 하위 쿼리가

나는 이와 같은 테이블을 가지고있다.

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

내가하고 싶은 것은 student_course 테이블의 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(); 

당신이(), 내가 문제를 얻는 것을 특징으로하는 두 번째 매개 변수에서 볼 수 있듯이. 이 시나리오에서는 원시 쿼리를 실행해야합니까? 어떻게 두 번째 매개 변수로 원시 쿼리를 실행할 수 있습니까? 그렇지 않다면, 어떻게 위의 하나의 쿼리에서 course_id로 필터링하고 어떤 테이블에 조인하지 않을 수 있습니까?

+1

아마 관련 : HTTP : // 유래 .com/questions/16815551/how-to-do-in-laravel-subquery-where- –

+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(); 
+0

주목할 가치 - 하위 쿼리에서'from (...)'을 사용하지 않으면 동일한 테이블을 쿼리합니다. 그래서이 경우'$ query-> from ('student_course') ... ' –

+0

편집을 사용하려고합니다. –

0

당신은이 작업을 수행 할 수 있습니다 참조 :

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

당신이 모델을 통과하려면, 당신은 사용할 수 있습니다

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