2017-08-14 137 views
0

我有3個模型和數據透視表:Laravel 5.4關係

學年 - 模型

ID

課程 - 模型

ID

schoolyear_id

course_student - 透視表

COURSE_ID

student_id數據

學生 - 模型

ID

關係是:

一學年的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

你的意思是?我想用orderBy來訂購它。只是想知道是否有更優雅的方式來獲得結果? – 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