【问题标题】:How to retrieve grandchildren through a polymorphic relation in Laravel 5.2?如何通过 Laravel 5.2 中的多态关系检索孙子?
【发布时间】:2017-02-01 01:38:13
【问题描述】:

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

一门课程有很多模块 模块变形为 Scorm 和其他 2 个表(本示例中未使用) 一个 scorm 变形一个模块并且有很多 Scoes 我正在尝试从我的课程模型中访问所有相关的分数:

$course->scoes.

我正在使用 Laravel 5.2,使用 Eloquent 关系,我知道这是不可能的。经过几次测试,使用查询生成器我实际上可以返回正确的数据,但是,它们作为 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');
}

【问题讨论】:

    标签: php laravel eloquent laravel-5.2 laravel-query-builder


    【解决方案1】:

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

    【讨论】:

    • 感谢您的回答更满意。如果我没有那种多态关系,这将适合。 :)
    【解决方案2】:

    我找到了一种方法来做我想做的事情。这种方式只对数据库进行 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);
    
    }
    

    【讨论】:

      猜你喜欢
      • 2016-12-20
      • 1970-01-01
      • 1970-01-01
      • 2016-11-03
      • 2019-04-04
      • 2020-11-14
      • 2023-04-06
      • 2017-09-03
      • 2019-11-14
      相关资源
      最近更新 更多