2016-02-16 84 views
1

我在數據庫中有四個表:組,專業,課程,group_lesson。它的結構:Laravel中的正確關係

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 - Eloquent model 
    name - string 
    lessons - collection of Lesson models of Group Specialty 
    date - date from group_lesson table 

我已經嘗試了不同的關係,組合,但它不起作用。請幫我寫出正確的關係。

回答

0

您可以使用急切加載通過關係訪問關係數據,甚至可以進一步鏈接關係。作爲一個經驗法則,如果您可以通過關係繪製從1個模型到另一個模型的路徑,則可以使用鏈式急切加載提前加載所有相關數據和關係數據。

Laravel Eager Loading

舉個例子

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

即使你只得到專業模型的一個實例,相關數據的hasMany,這意味着多個記錄。您需要使用foreach循環遍歷這些記錄以訪問它們的相關數據,或者在初始查詢中交替地添加其他閉包以僅加載單個相關模型。

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

您需要爲兩個要顯示相關信息的實例執行此操作。

+0

我知道。但我需要這個工作:** Group :: with(['lessons']) - > find($ id); ** – DuxaBilii