2016-02-16 4 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

Вы можете использовать eager-load для доступа к реляционным данным через отношения и даже более целыми отношениями. Как правило, если вы можете нарисовать путь от одной модели к другой с помощью отношений, вы можете загрузить все соответствующие и реляционные данные для этого с помощью цепляющихся энергичных нагрузок.

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

Смежные вопросы