laravel雄辩的急加载倍数有很多关系

nbnkbykc  于 2021-06-18  发布在  Mysql
关注(0)|答案(2)|浏览(273)

在我的数据库模型中 Class 有很多 StudentStudent 有很多 HomeworkHomework 有很多 Question . 如何编写一个带有急切加载的查询来获取每个 Question 与一个特定的 Class ?
我可以使用以下代码获得嵌套结构:

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

如何获取此集合中所有问题的数组?我现在得到了什么 toArray() 方法的结构如下:

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

xn1cxnb41#

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

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

这样,每次你有一个学生对象,你就可以得到一系列的问题,比如:

$student->questions

希望这能帮到你。

93ze6v8z

93ze6v8z2#

这个案子没有本地人的关系。
我创造了一个 HasManyThrough 与无限级别的关系:github上的存储库
安装完成后,可以这样使用:

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

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

相关问题