2017-11-28 5 views
0

学校のプラットフォームでは、特定の学校のクラスに登録されているすべての生徒をリストしたいと思います。このリストでは、id、last_name、first_name、各生徒のクラス名を見たいと思います。ネストされた関係を読み込むことを熱望しています

Id +フルネームは問題ありませんが、すべてのリレーションシップを読み込んでグレードで完全なクラス名を表示することはできません。

私の関係は、次のとおりです。

student -> hasMany -> Enrollments 
-----------Enrollments -> belongsTo -> offering 
--------------------------offering -> belongsTo -> schoolClasses 
--------------------------offering -> belongsTo -> schoolyears 
--------------------------------------schoolClass -> belongsTo -> grade 

クラス名は、グレード名+クラス名(例えば保育園1 + A)の外に構成されています。

$students = Student::with('offerings.schoolClasses.grades')->get(); 
return view('student.overview', ['students' =>$students]); 

と、この:私のコントローラでこれを行うことにより

enter image Example here

EER diagram

は現在、私はこの作業を持っている:

私のEERは以下の通りです私の見解では:

@foreach($students as $student) 
<tr> 
    <th scope="row">{{$student->id}}</th> 
    <td>{{$student->first_name}}</td> 
    <td>{{$student->last_name}}</td> 
    <td>{{$student->offerings}}</td> 
</tr> 
@endforeach 

誰かが最終的なビットを手伝ってもらえますか?私は私の中の私の関係の定義、間違っていたものを見つけ

{{$student->offerings->schoolClasses->grades->grade}} 
+0

あなたのEER画像には「学生」モデルがありません。 –

+0

生徒はユーザーです。申し訳ありませんが、私はそれについて言及しませんでした。学生モデルは、ユーザーモデルに基づいたモデルですが、ユーザーが登録されているかどうかを確認します。 –

+0

enrollementが "join"テーブルであるとか、Laravelと同じように "ピボット"テーブルと呼ばれています。 [多対多の関係に関するLaravelのドキュメント](https://laravel.com/docs/5.5/eloquent-relationships#many-to-many)のヘルプを利用できます。あなたも同様の場合があります。 –

答えて

0

$students = Student::with('offerings.schoolClasses.grades') 
->with(array('offerings.schoolYears'=>function($query){ 
     $query->where('start', '=', $somedate) 
    })) 
->get(); 

、あなたはグレードを表示するにはこれを試すことができます。

0

私はあなたがこのように試みることができると思いますモデルには参照する外部キーが含まれていませんでした。

私は関係参照するときに、明示的な外部キーを追加する必要がありました:

public function schoolClass(){ 
    return $this->belongsTo(SchoolClass::class,'school_class_id'); 
} 

public function schoolyears(){ 
    return $this->belongsTo(Schoolyear::class,'schoolyear_id'); 
} 

school_class_idschoolyear_id必要なすべてを正しくロードするために。

+0

残念ながら、これは動作しません、それは学校のクラスとschoolyearがnullを返すようです。私が自分のデータベースをチェックすると、問題の生徒は、クラスと成績を備えた提供にリンクしているようです。だから通常これはうまくいくはずです。どこが間違っているのか分かりませんか? –

+0

@Anwar_Nairiのようなモデルやリレーションシップのようなあなたのコードの多くを表示する必要があります、より多くのコードがあなたを助けることができる場合は、登録は、ユーザーと製品間の多対多の関係のピボットテーブルによって行う必要があります。 –

+0

あなたは本当に正しいです、これらの関係は確立されましたが、私が知ったように、私は関係を参照するときに外来キーを追加しなければなりませんでした。私は今それのハングアップを取得します。私を助けてくれてありがとう –

関連する問題