如何使用laravel 5中的多个预先加载来收集数据

时间:2017-07-20 10:16:14

标签: laravel-5 orm eager-loading

我只是想知道为什么我的代码不起作用,我的意思是,在我使用预先加载收集单个数据之后,如果我收集嵌套关系,它会返回错误。请参阅下面的代码。

错误

  

尝试获取非对象的属性

我的代码

Controller.php这样

$ex = Exam::with('answers', 'child.answers')->find($id);
$exam = collect($ex->answers);
$exams = $exam->merge(collect($ex->child->answers));

return view('school.exam.view', compact('exams'));



view.blade.php

@foreach($exams as $exam)
  <li>{{ $exam->name }}</li>
@endforeach




我该怎么办?

1 个答案:

答案 0 :(得分:0)

因为这行

  

$ exam = collect($ exam-&gt; answers);

也许你想要这个

  

$ quizzes = collect($ exam-&gt; answers);

编辑:

这是因为$exam->child是一个集合。你需要遍历每个孩子并获得答案。为清晰起见,您还应该将关系命名为childs

$ex = Exam::with('answers', 'childs.answers')->find($id);
$exam = collect($ex->answers);
foreach(collect($ex->childs) as $child) {
    $exams = $exam->merge(collect($child->answers));
}

return view('school.exam.view', compact('exams'));