2016-07-01 116 views
1

我在Laravel 5中使用雄辯,並且在表之間的關係中有點困惑。這些是軟件的現有表格,不能更改。使用雄辯的關係

我有下列表格顯示學生的歷史細節。所有表都有創建的模型類。

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'); 

編輯:你的表是使用自定義的標識,所以你必須實現在每個模型protected $primaryKey = 'custom_id';