Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何通过Laravel 5.2中的多态关系检索孙子?_Php_Laravel_Eloquent_Laravel 5.2_Laravel Query Builder - Fatal编程技术网

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

Php 如何通过Laravel 5.2中的多态关系检索孙子?,php,laravel,eloquent,laravel-5.2,laravel-query-builder,Php,Laravel,Eloquent,Laravel 5.2,Laravel Query Builder,我的数据库设计如下图所示 课程有许多模块 模块变形为Scorm和其他2个表(本例中未使用) scorm变形为一个模块并具有多个SCOE 我试图通过以下方式从我的课程模型访问所有相关SCOE: $course->scoes. 我使用的是Laravel5.2,我知道这是不可能的。经过几次测试后,使用查询生成器我实际上可以返回正确的数据,但是,它们作为Module::class而不是Scorm和Sco的实例返回 这就是我现在的代码 谢谢 public function modules() {

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

课程有许多模块 模块变形为Scorm和其他2个表(本例中未使用) scorm变形为一个模块并具有多个SCOE 我试图通过以下方式从我的课程模型访问所有相关SCOE:

$course->scoes.

我使用的是Laravel5.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');
}

我不确定,但这可能正是你想要的。
我找到了一种方法来做我想做的事。这种方式只对数据库进行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);

}

谢谢你更满意的回答。如果我没有这种多态关系,这将很合适。:)