2016-10-09 34 views
1

我就要從數據庫中grade_id:Laravel 5雄辯ORM選擇哪裏 - 數組作爲參數

$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') - > where('teacher_id',$ teacher_id) - > select('grade_id') - > get() - >列表('grade_id') - > all();'或DB :: table('grades') - > where('teacher_id',$ teacher_id) - > pluck('grade_id') - > all()'然後第二個查詢 –

回答

1

根據laravels版本的$grade_id是數組或對象的集合。你需要的是一個數組或一組值。 您可以使用pluck()方法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之前,您必須使用lists()而不是pluck()。而whereIn()方法不接受Builder作爲第二個參數。要獲得相同的查詢,您需要使用關閉:

$home_feed = Home::join('home_grade', 'home_grade.home_id', '=', 'homes.id') 
    ->whereIn('grade_id', function($query) use($teacher_id) { 
     $query->from('grades') 
      ->where('teacher_id', $teacher_id) 
      ->select('grade_id'); 
    }) 
    ->get(); 
+0

當我使用子查詢時,我得到以下錯誤:傳遞給Illuminate \ Database \ Grammar :: parameterize()的參數1必須是類型數組,對象給定' – user3714932

+0

什麼是您的laravel版本? –

+1

@ user3714932我在5.2.39測試了以下代碼:'$ subQuery = DB :: table('categories') - > where('name',$ catName) - > select('id'); $ products = App \ Product :: join('category_product as cp','cp.product_id','=','products.id') - > whereIn('category_id',$ subQuery) - > get();' 。並且它執行以下工作查詢:''在\'cp \'上選擇* from \'products \'inner join \'category_product \'作爲''cp \''。''category_id \'in(select \'id \'from \'categories \'where \'name \'=?)''。 –

0

您的第一個查詢正在返回一個集合,而不是grade_id。

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

+0

'Collection'不是問題。問題在於它包含對象,而'whereIn()'需要一個數組/簡單值的集合。但你的代碼似乎是正確的。 –

+0

當我使用pluck時,只返回一個結果(第一個)。 – 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();