2016-10-09 5 views
1

매개 변수로 배열 :Laravel 5 웅변 ORM 위치를 선택 - 나는 데이터베이스에서 grade_id지고있어

$grade_id = DB::table('grades')->where('teacher_id',$teacher_id)->select('grade_id')->get();

후 나는 웅변 절에 그 grade_id 배열을 사용하려면 그래서 난 실행

$home_feed = Home::join('home_grade', 'home_grade.home_id', '=', 'homes.id') 
           ->whereIn('grade_id', $grade_id) 
           ->get(); 

하지만 난 오류지고있어이 실행하면 Object of class stdClass could not be converted to string

어떤 문제가 될 수 있습니까? 고마워.

+0

시도'$ grade_id = DB :: 표 ('등급') -> 여기서 ('teacher_id', $의 teacher_id) -> ('grade_id')를 선택 -) (첫번째>를; ' –

+1

첫 번째 질의는 아마도 콜렉션 객체를 반환 할 것이므로'$ grade_id = DB :: table ('grades') -> ('teacher_id', $ teacher_id) -> select ('grade_id') -> get() ('grade_id') -> all(); 또는 DB :: table ('grades') -> 여기서 ('teacher_id', $ teacher_id) -> pluck ('grade_id' > all()'두 번째 쿼리 –

답변

1

$grade_id = DB::table('grades')->where('teacher_id',$teacher_id)->pluck('grade_id');는 laravels 버전에 따라 당신의 $grade_id 배열 또는 개체의 컬렉션 중 하나입니다. 필요한 것은 배열 또는 값 모음입니다. 012zz메서드 인디케이트 select()을 사용하면 IzzEps와 비슷하게 달성 할 수 있습니다.

그러나 당신이 whereIn() 방법에 하위 쿼리를 전달하여 동일한 결과를 얻을 수 있습니다 대신이 단 하나의 쿼리를 실행합니다

$gradeSubquery = DB::table('grades')->where('teacher_id',$teacher_id)->select('grade_id'); 

$home_feed = Home::join('home_grade', 'home_grade.home_id', '=', 'homes.id') 
       ->whereIn('grade_id', $gradeSubquery) 
       ->get(); 

이 방법.

업데이트 : 버전 5.2 이전 버전에서는 pluck() 대신 lists()을 사용해야합니다. 그리고 whereIn() 메서드는 두 번째 매개 변수로 Builder을 허용하지 않습니다. 동일한 쿼리를 얻으려면 클로저를 사용해야합니다.

+0

하위 쿼리를 사용하면 다음과 같은 오류가 발생합니다.'Illuminate \ Database \ Grammar :: parameterize()에 전달 된 인수 1이 배열 형식의 개체 여야합니다. ' – user3714932

+0

Laravel 버전은 무엇입니까? –

+1

@ user3714932 5.2.39에서 다음 코드를 테스트했다 :'$ subQuery = DB :: table ('categories') -> where ('name', $ catName) -> select ('id'); whereIn ('category_id', $ subQuery) -> get();'$ item = App_Product_id ','cp.product_id ','= ','products.id ' . 그리고 다음과 같은 작업 질의를 실행합니다 :'select * from \'products \'inner join \'category_product \'\ cp \'\ cp \'.\'category \'어디 \'카테고리 \'에서 \'id \'를 \'name \'=?)'에'\'product_id \'= \'제품 \'. –

0

첫 번째 쿼리가 grade_id가 아닌 컬렉션을 반환합니다.

대신을 시도해보십시오

+0

'Collection'은 문제가 아닙니다. 문제는 객체를 포함하고있는 반면,'whereIn()'은 간단한 값의 배열/콜렉션이 필요하다는 것입니다. 하지만 코드가 정확하다고 보입니다. –

+0

뽑아 낼 때 하나의 결과 (첫 번째 결과) 만 반환됩니다. – user3714932

0

목록을 사용했습니다. $grade_id = Grade::where('teacher_id', $teacher_id)->lists('grade_id'); 그들은 컬렉션 대신 배열을 반환합니다.

0

배열을 올바르게 만들어야합니다. 이를 수행하려면 Eloquent가 작동하는 두 가지 기능, 즉 pluck()toArray()을 사용하십시오. 아래의 예를 살펴 보겠습니다 :

$grade_id = DB::table('grades')->where('teacher_id',$teacher_id)->pluck('grade_id')->toArray();