如何使用两个BelongsTo访问数据?

时间:2017-02-09 13:20:05

标签: laravel laravel-5

我有三张桌子 - “课程”,“课程”和“任务”。每节课都属于一门课程,每节课都属于一课。我想输出一个任务,显示任务名称,课程名称和课程名称。如何访问课程表数据?为了获得与课程相关的课程信息,我在我的任务模型中使用了以下内容:

$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');
}

我哪里错了?感谢

3 个答案:

答案 0 :(得分: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是您的收藏品,您可以在刀片中访问课程和课程,如下所示:

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

答案 1 :(得分:0)

所以你想要hasManyThrough的反转?

Laravel的hasManyThrough功能(请参阅他们的网站)有助于将课程连接到任务直接,而无需在单独的关系中建立中间连接。

您正在寻找逆转?

答案 2 :(得分:0)

lesson.php model不存在的关系courses中,您的问题就出现了。使用答案@jeroenF

告诉你