2016-10-18 3 views
0

モデルテーブルのクエリビルダーインスタンスと同じモデルのオブジェクトの配列の差異を取得するにはどうすればよいですか?クエリビルダインスタンスと同じインスタンスの配列の違いを取得する方法

foreach ($completed_course_id as $value) 
    { 
     array_push($completed_courses,DB::table('courses')->where('id', $value)->first()); 
    } 
    $courses = Course::all(); 
    $result = array_diff($courses, $completed_courses); 

")(array_diff:引数#1は、配列ではない" コンパクト戻るように結果を渡す

答えて

2

Course::all()あなたの配列を反復処理するためにあなたにvast amount of helper methodsを提供Illuminate\Database\Eloquent\Collectionオブジェクトを返します。

代わりarray_diff($courses, $completed_courses);のだから、あなたは最初$courses->toArray()を呼び出すことにより、配列に$coursesを変換する必要があります:

サイドノートで
$result = array_diff($courses->toArray(), $completed_courses); 

、その上記のコードを達成しようとしているものはおそらく勝っていますあなたが一連のオブジェクトの上にarray_diffをやっているので動作しません! $completed_course_idをループして1つずつ問い合わせることも非効率的です。私はあなたの目標がここで不完全なすべてのコースを取得することだと仮定しています。これを行うには、これを使用して上記のすべてのコードを置き換えてください:

$result = DB::table('courses') 
    ->whereNotIn('id', $completed_course_id)->get(); 
関連する問題