2017-08-14 20 views
0

I 3つのモデルとピボットテーブルを有する:Laravel 5.4関係

SchoolYear - モデル

ID

コース - モデル

ID

schoolyear_idを

course_student - ピボットテーブル

をCourse_IDに

スチューデントSTUDENT_ID - モデル

ID

関係は以下のとおりです。

SchoolYear hasManyのコース

コースbelongsToMany学生トラフcourse_student

学生belongsToManyコーストラフcourse_student

学生を見つけるための最速、よりエレガントな方法は何ですか学年に転入し、また学生の属性によって分類することができるようにするか?

 $year = SchoolYear::firstOrCreate(['anul'=>Carbon::now()->year]); 
     $courses = $year->courses; 
     $students = collect([]); 
     foreach($courses as $course){ 
      $course_students = $course->students; 
      foreach($course_students as $course_student){ 
       $students->push($course_student); 
      } 
     } 
     dd($year, $students); 
+0

どのような方法で学生のプロパティを並べ替えるのですか?例えば。テーブル? –

+0

どういう意味ですか?オーダーで注文したい。結果を得るよりエレガントな方法があるかどうかを知りたいだけですか? – Zoli

答えて

1

Eloquentは、関係の存在を問い合わせる一連のメソッドを提供します。条件がない場合はhas()、条件がある場合はwhereHas()となります。

あなたのケースでは、関連する学年のある生徒が必要です。

$year = SchoolYear::firstOrCreate(['anul'=>Carbon::now()->year]); 

// assumes Student has a "courses" relationship, 
// and Course has a "schoolYear" relationship 
$students = Student::whereHas('courses.schoolYear', function ($query) use ($year) { 
     return $query->where('anul', $year->anul); 
    }) 
    ->get(); 

dd($year, $students); 
+0

これは私が探していたものです:) ありがとう@patricius! – Zoli