2016-09-23 31 views
2

我的數據庫設計如下圖所示。如何通過Laravel 5.2中的多態關係檢索孫子女?

的課程有很多模塊 模塊搖身一變,以SCORM和其他2個表(在本例中未使用) SCORM的變身一個模塊並有許多Scoes 我試圖訪問從我的課程模型全部使用相關的scoes :

$course->scoes.

我使用Laravel 5.2,用雄辯的關係,我知道這是不可能的。經過幾次測試之後,使用查詢生成器我實際上可以返回正確的數據,但是,它們返回的是Module :: class的實例,而不是Scorm和Sco。

這是我現在的代碼。

感謝,

public function modules() { 
    return $this->hasMany(Module::class); 
} 

public function scorms(){ 
    return $this->modules()->where('moduleable_type','=','scorms'); 
} 
public function scoes(){ 
    return $this->scorms()->select('scoes.*') 
     ->join('scoes','modules.moduleable_id','=','scoes.scorm_id'); 
} 

enter image description here

回答

0

我找到了一種方法來做我想做的事情。這種方式只對數據庫進行兩次查詢,並且它位於Sco模型中。

//returns a Course Object. 
$sco->course() 

/** 
* Get the course 
* @return App\Course|null 
*/ 
public function Course(){ 
    $o = $this 
     ->join('scorms','scoes.scorm_id','=','scorms.id') 
     ->join('modules',function($join){ 
      $join 
       ->on('moduleable_id','=','scorms.id') 
       ->where('moduleable_type','=','scorms'); 
     }) 
     ->join('courses','modules.course_id','=','courses.id') 
     ->select('courses.id as course_id') 
     ->first(); 

    if(!$o) return null; 

    return Course::find($o->course_id); 

}