2016-09-23 2 views
2

Моя конструкция базы данных выглядит как диаграмма внизу.Как получить внуков через полиморфное отношение в Laravel 5.2?

Курс имеет множество модулей модули морфов в Scorm и 2 других таблиц (не используемых в данном примере) SCORM Morph один модуль и имеет много Scoes я пытаюсь получить доступ из моей курсовой модели все scoes, связанные с использованием :

$course->scoes.

Я использую Laravel 5.2, используя красноречивым отношения, я знаю, что это не возможно. После нескольких тестов, используя построитель запросов, я действительно могу вернуть правильные данные, но они возвращаются как экземпляр класса Module :: вместо 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

Я нашел способ сделать то, что я пытался сделать. Таким образом, всего лишь 2 запроса к db, и он находится в Sco Model.

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

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