在视图中以正确的格式显示数据

Showing the data in the correct format within the view

用户可以填写一个基于多个问题的表单,每个问题有 6 个相关字段。

表单信息存储在数据库中,如:

id / audit_id / question_id / score
1003    33          97      3
1004    33          97      0   
1005    33          97      2   
1006    33          97      0   
1007    33          97      2   
1008    33          97      0   
1009    33          98      3   
1010    33          98      1   
1011    33          98      3   
1012    33          98      1   
1013    33          98      3   
1014    33          98      0       

所以在上面的例子中,审计 33 有 question_id 97 和 98,每个都有 6 个答案。

获取信息的控制器函数:

Audit::where('audit_id', $auditScore->id)
    ->with('rquestion')
    ->with('rquestion.auditQuestion')
    ->get();

returns数组中的每个问题:

Collection {#486 ▼
  #items: array:78 [▼
    0 => Audit {#490 ▶}
    1 => Audit {#491 ▶}
    2 => Audit {#492 ▶}
    3 => Audit {#493 ▶}
    4 => Audit {#494 ▶}
    5 => Audit {#495 ▶}
    6 => Audit {#496 ▶}
    7 => Audit {#497 ▶}
    8 => Audit {#498 ▶}
    9 => Audit {#499 ▶}

我面临的问题是我想遍历数据,向用户显示以下内容:

One question and its 6 answers, then the next question and its 6 answers

但是因为每个'question row'都是单独返回的,所以我有一个问题和分数。所以对于我显示的每一个分数,它都有问题!

每个问题总是有 6 个答案,所以我的想法是以某种方式打印第一个分数的问题,然后自己打印剩余的 5 个分数?

我不确定如何实现。如何获得每个 question_id 的所有 6 个分数?也许,每个 question_id 包含 6 个分数的数组?

非常感谢,

您可以简单地将它们按 question_id 分组。
假设 $auditList 包含您的审计列表:

$groupedQuestions = [];
foreach ($auditList as $singleAudit)
{
    $groupedQuestions[$singleAudit->question_id][] = $singleAudit;
}

然后,你会得到这样的数组

array:2 [▼
  97 => array:3 [▼
    0 => Audit {#160 ▶}
    1 => Audit {#159 ▶}
    2 => Audit {#163 ▶}
  ]
  98 => array:1 [▼
    0 => Audit {#164 ▶}
    ...
  ]
  ...
]

如果需要,您可以稍微更改代码并将问题文本移动到 "upper" 数组中,这样通过 blade

获取它会更容易
    foreach ($auditList as $singleAudit)
    {
        $groupedQuestions[$singleAudit->question_id]['question'] = $singleAudit->getQuestionText(); // assuming that you have a similar method on your entities
        $groupedQuestions[$singleAudit->question_id]['answers'][] = $singleAudit;
    }

您的结果数组将类似于此

array:2 [▼
  97 => array:2 [▼
    "question" => "This is the question text"
    "answers" => array:3 [▼
      0 => Audit {#160 ▶}
      1 => Audit {#159 ▶}
      2 => Audit {#163 ▶}
    ]
  ]
  98 => array:2 [▼
    "question" => "This is the question text"
    "answers" => array:1 [▼
      0 => Audit {#164 ▶}
    ]
  ]
]

通过blade获取会像这样

@foreach($questions as $question)
The question is: {{$question['question']}}    <br />
Answers are: <br />
    @foreach($question['answers'] as $answer)
        {{$answer->id}} <br />
    @endforeach
@endforeach

打印

The question is: This is the question text
Answers are:
1033
1034
1035
...
The question is: This is the question text
Answers are:
1035
...