2016-07-01 85 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';