Laravel雄辩的雄心勃勃加载多个有很多关系

时间:2018-10-23 23:46:34

标签: php mysql laravel-5 eloquent

在我的数据库中,模型Class有很多Student,每个Student有很多Homework,每个Homework有很多Question。我该如何编写一个渴望加载的查询来获取与一个特定Question相关的每个Class

我可以使用以下代码获得嵌套结构:

$class = Class::find($classId);
$collection = $class->with('students.homeworks.questions')->get();

如何获取此收藏集中的所有问题?我目前通过toArray()方法获得的结构是这样的:

{ //Class
    ...
    students: [
        {
            homeworks: [
                {
                    questions: [{...}]
                },
                ...
            ]
        },
        ...
    ]
}

2 个答案:

答案 0 :(得分:1)

在这种情况下没有本机关系。

我创建了一个HasManyThrough级的无限关系:Repository on GitHub

安装后,您可以像这样使用它:

class Class extends Model {
    use \Staudenmeir\EloquentHasManyDeep\HasRelationships;

    public function questions() {
        return $this->hasManyDeep(Question::class, [Student::class, Homework::class]);
    }
}

答案 1 :(得分:1)

您可以在Student模型中创建一个函数:

public function questions(){
   $questions = [];
   foreach($this->homework as $homework){
        foreach($homework->questions as $question){
           array_push($questions, $question);
        }
   }
   return $questions;
}

通过这种方式,每当您有一个学生对象时,您都可以得到所有类似这样的问题的数组:

$student->questions

希望这可以为您提供帮助。