我有三张桌子 - “课程”,“课程”和“任务”。每节课都属于一门课程,每节课都属于一课。我想输出一个任务,显示任务名称,课程名称和课程名称。如何访问课程表数据?为了获得与课程相关的课程信息,我在我的任务模型中使用了以下内容:
$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');
}
我哪里错了?感谢
答案 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