在我的数据库中,模型Class
有很多Student
,每个Student
有很多Homework
,每个Homework
有很多Question
。我该如何编写一个渴望加载的查询来获取与一个特定Question
相关的每个Class
?
我可以使用以下代码获得嵌套结构:
$class = Class::find($classId);
$collection = $class->with('students.homeworks.questions')->get();
如何获取此收藏集中的所有问题?我目前通过toArray()
方法获得的结构是这样的:
{ //Class
...
students: [
{
homeworks: [
{
questions: [{...}]
},
...
]
},
...
]
}
答案 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
希望这可以为您提供帮助。