2017-02-09 7 views
1

"コース"、 "レッスン"、 "タスク"という3つのテーブルがあります。各レッスンはコースに属し、各タスクはレッスンに属します。タスク名、レッスン名、コース名を表示してタスクを出力したい。どのようにしてコーステーブルのデータにアクセスできますか?コースにリンクされレッスン情報を取得するには、私は私のタスクモデルで次のように使用しています2つのBelongsToを使用してデータにアクセスするにはどうすればよいですか?

$lessonName = $this->lessons->lesson_name; 

をそのレッスンに関連するコース名を取得するには、私がいない成功を収めて次のことを試してみましたが、私は本当に午前ここで推測:次のように

$courseName = $this->lessons->courses->course_name; 

私のモデルの関係は以下のとおりです。

Course.php

public function lessons() 
{ 
    return $this->hasMany('App\Lesson'); 
} 

Lesson.php

public function tasks() 
{ 
    return $this->belongsTo('App\Task', 'task_id', 'id'); 
} 

Task.php

public function lessons() 
{ 
    return $this->belongsTo('App\Lesson', 'lesson_id', 'id'); 
} 

はどこで間違ったんですか?ありがとう

答えて

2

アクセサーを使用してこれを行うには別の方法があります。あなたのタスクモデルの

次の手順を実行します。あなたは、タスクが属するレッスンに関するすべてのデータを受け取る。ここ

public function getLessonAttribute(){ 
    return Lesson::where('id', $this->attributes[*foreign_key_field*])->first(); 
} 

、およびモデルの他の属性(フィールド)としてそれらを使用することができます。

レッスンモデルでは、それが属するコースを取得します。

public function getCourseAttribute(){ 
    return Course::where('id', $this->attributes[*course_foreign_key_field*])->first(); 
} 

、その後$taskがあなたのコレクションであると仮定すると、あなたがレッスンやブレードに以下のようなコースにアクセスすることができます:あなたのlesson.php model

$task->lesson->lesson_name$task->lesson->course->course_name

+0

これは完全に動作します、ありがとう:) – user3623348

0

あなたhasManyThroughの逆をしたいですか?

LaravelのhasManyThrough機能(サイト参照)を使用すると、コースをタスクに直接接続することが容易になります。中間接続は別の関係にありません。

あなたは逆をお探しですか?

0

は関係が存在しないcoursesあなたの問題があります。あなたが言った答えを使用する@jeroenF

関連する問題