繁体   English   中英

如何通过Laravel 5.2中的多态关系检索孙子代?

[英]How to retrieve grandchildren through a polymorphic relation in Laravel 5.2?

我的数据库设计如下图所示。

一门课程有许多模块,模块转换为Scorm和其他2个表(此示例中未使用)。scorm变形一个模块,并具有许多Scoes,我尝试使用以下方式从我的课程模型中访问所有相关的scoe:

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

在此处输入图片说明

我不确定,但这可能正是您想要的。 https://laravel.com/docs/5.2/eloquent-relationships#has-many-through

我找到了一种方法去做自己想做的事情。 这种方式仅对数据库进行2个查询,并且位于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);

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM