2016-07-01 7 views
1

Я использую Eloquent в Laravel 5 и немного запутался в отношениях между таблицами. Это существующие таблицы программного обеспечения и не могут быть изменены.Отношения с использованием Eloquent

У меня есть следующие таблицы, которые показывают исторические сведения об ученике. Во всех таблицах созданы классы классов.

student 
------- 
student_id (PK) 
first_name 
last_name 

class 
----- 
class_id (PK) 
name 
section 
year //2012, 2013 etc 
student_id (FK) 

result 
------ 
result_id (PK) 
class_id (FK) 
month  // jan, feb etc 
status  //pass or fail 

Ниже приведены подробные сведения о каждой таблицы

  • исследования для студентов в классе за конкретный год
  • Каждый класс на этот год будет иметь 10 результатов (1 результат для каждого месяца в году)
  • Каждый результат будет содержать состояние для теста в течение месяца (или не проходят)

Я хочу AcC ess на основе приведенных ниже примеров. Можете ли вы руководство по настройке отношений в модели классов

student->class(2013)->result(jan) 
result(feb)->class(2016)->student 
+0

Проверьте документацию laravel и подкасты laravel. Там есть много хорошей информации, например. https://laravel.com/docs/5.1/eloquent-relationships – apokryfos

ответ

3

Прежде всего, вы должны определить отношения между вашими моделями:

Result.php модель

public function class(){ 
    return $this->belongsTo('Class::class'); 
} 

класса. php

public function results(){ 
    return $this->hasMany('Result::class'); 
} 

public function student(){ 
    return $this->belongsTo('Student::class'); 
} 

Student.php модель

public function classes(){ 
    return $this->hasMany('Class::class'); 
} 

Затем вы можете использовать некоторые запросы. Для первого примера student->class(2013)->result(jan):

$results = Student::find($student_id)->classes()->where('year', '2013')->results()->where('month', 'jan')->get(); 

Кроме того, если вам нужно будет искать классы по годам и результаты по месяцам много раз, вы можете легко добавить некоторые методы, как это в вашей модели:

Student.php модель

public function classesByYear($year){ 
    return $this->classes()->where('year', $year)->get(); 
} 

Class.php модель

public function resultsByMonth($month){ 
    return $this->results()->where('month', $month)->get(); 
} 

Так предыдущий пример будет:

$results = Student::find($student_id)->classesByYear('2013')->resultsByMonth('jan'); 

EDIT: Ваши таблицы с помощью пользовательского идентификатора, так что вы должны реализовать protected $primaryKey = 'custom_id'; на каждой модели.

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