在Laravel中建立正确的关系

时间:2016-02-16 11:36:52

标签: laravel-4 eloquent relationship

我在数据库中有四个表:组,专业,课程,group_lesson。它的结构:

groups
    id
    specialty_id
    name
specialties
    id
    name
lessons
    id
    specialty_id
group_lesson (UNIQUE INDEX lesson_id, group_id)
    lesson_id
    group_id
    date

我的模特现在看起来像这样:

class Group extends Eloquent {
    public function specialty() {
        return $this->belongsTo('Specialty');
    }
}

class Lesson extends Eloquent {
    public function specialty() {
        return $this->belongsTo('Specialty');
    }
}

class Specialty extends Eloquent {
    public function lessons() {
        return $this->hasMany('Lesson');
    }

    public function groups() {
        return $this->hasMany('Group');
    }
}

我需要在Group模型中获得其他字段

Group - Eloquent model
    name - string
    lessons - collection of Lesson models of Group Specialty
    date - date from group_lesson table

我尝试过不同的关系和组合,但它并不起作用。请帮我写出正确的关系。

1 个答案:

答案 0 :(得分:0)

您可以使用预先加载来通过关系访问关系数据,甚至可以进一步链接关系。根据经验,如果您可以通过关系绘制从1个模型到另一个模型的路径,则可以使用链式切换加载来加载所有相关和关系数据。

Laravel Eager Loading

作为一个例子

$speciality_group = Speciality::with('group','lessons')->find($id);

即使您只获得专业模型的单个实例,相关数据也是hasMany,意味着多个记录。您需要使用foreach循环遍历这些记录以访问它们的相关数据,或者在初始查询中添加其他闭包以仅加载单个相关模型。

 foreach($speciality_group->group as $group)
    {
      echo $group->name;
    }

您需要为要显示相关信息的两个实例执行此操作。