Laravel - 遍历嵌套集合
Posted
技术标签:
【中文标题】Laravel - 遍历嵌套集合【英文标题】:Laravel - Looping through a nested collection 【发布时间】:2017-08-19 04:13:46 【问题描述】:获取所有所需数据的功能:
$auditResults = Audit::where('audit_id', $id)
->with('questionDetail')
->with('questionDetail.auditQuestion')
->get();
返回(精简):
Audit #427 ▼
#relations: array:1 [▼
"questionDetail" => AuditQuestionDetail #449 ▼
#relations: array:1 [▼
"auditQuestion" => AuditQuestion #471 ▼
#original: array:5 [▶]
]
]
对于每个Audit
,我如何在视图中循环以达到auditQuestion
关系?
我试过了:
@foreach($auditResults->questionDetail->auditQuestion as $answer)
但我明白了:
未定义的属性: Illuminate\Database\Eloquent\Collection::$questionDetail
非常感谢。
** 第一个关系的问题:**
Collection #470 ▼
#items: array:18 [▼
0 => Audit #427 ▼
#fillable: array:4 [▶]
#attributes: array:7 [▶]
#original: array:7 [▶]
#relations: array:1 [▼
"questionDetail" => AuditQuestionDetail #449 ▼
#table: "audit_questions_details"
#fillable: array:3 [▶]
#attributes: array:7 [▶]
#original: array:7 [▼
"id" => 2
"audit_question_id" => 2
"question_number" => 1
"comment" => 1
"header" => 0
"created_at" => "2017-03-26 13:40:18"
"updated_at" => "2017-03-26 13:40:18"
]
【问题讨论】:
【参考方案1】:使用嵌套循环:
@foreach ($auditResults as $result)
@foreach ($result->questionDetail as $detail)
@foreach ($detail->auditQuestion as $question)
$question->id
@endforeach
@endforeach
@endforeach
【讨论】:
谢谢,但使用上述返回Undefined variable: questionDetail
。另外,questionDetail
前面有 $,但下面一行没有 auditQuestion
是否有原因?
@Ben 有一个错字,只需删除questionDetail
之前的$
符号
谢谢。它现在返回此错误Trying to get property of non-object
@Ben 我没有看到数据,所以我不能给你一个准确的代码来解决这个错误。只需为空对象和关系添加类似@if (!is_null($question))
的检查
如果我只对这个@foreach ($result->questionDetail as $detail) $detail @endforeach
使用foreach
,它会返回1
。我本来希望这会从关系中返回数据。这可能是问题吗?【参考方案2】:
在 Laravel 5.4 中,你可以使用 higher order messages 干净地做到这一点:
@foreach($auditResults->map->questionDetail->map->auditQuestion as $answer)
【讨论】:
谢谢你,不幸的是,这会返回Undefined property: Illuminate\Database\Eloquent\Collection::$map
如果可能的话,我会考虑更新你的 Laravel 版本。否则,您可以使用@Alexey Mezenin 的答案
删除评论。
非常感谢,不幸的是它返回Undefined property: Illuminate\Database\Eloquent\Collection::$questionDetail
。我不确定为什么我在第一次恋爱中遇到了麻烦。
我更新了描述,更详细地了解了第一个关系。以上是关于Laravel - 遍历嵌套集合的主要内容,如果未能解决你的问题,请参考以下文章