【问题标题】:Laravel - Looping through a nested collectionLaravel - 遍历嵌套集合
【发布时间】: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"
          ]

【问题讨论】:

    标签: php laravel laravel-5 foreach blade


    【解决方案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。我不确定为什么我在第一次恋爱中遇到了麻烦。
    • 我更新了描述,更详细地了解了第一个关系。
    猜你喜欢
    • 2018-06-16
    • 2014-08-13
    • 2018-12-09
    • 2014-11-02
    • 1970-01-01
    • 2017-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多