2016-07-01 9 views
1

저는 Laravel 5에서 Eloquent를 사용하고 있는데 테이블 사이의 관계에 약간 혼란 스럽습니다. 이들은 소프트웨어의 기존 테이블이며 변경할 수 없습니다.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 할)

    을 (한 달에 시험에 대한 상태를 포함 통과 또는 실패 아래의 예를 기반으로 한 객체입니다. 당신은 모든

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

    laravel 설명서 및 laravel podcast를 확인하십시오. 예를 들어 많은 좋은 정보가 있습니다. 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 모델

    0 그래서 앞의 예는 될 것입니다 :

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

    편집 : 각 모델에 protected $primaryKey = 'custom_id';를 구현해야합니다 귀하의 테이블, 사용자 정의 식별자를 사용하고 있습니다.

    관련 문제