显示每个用户的总答案和正确答案
Displaying total answer and correct answer of each user
我有这样的数据库结构:
表:
users(id, email, password, ...) //default laravel users table
examinees(id, user_id, ...)
exam_quizzes(id, title, explanation)
exam_quiz_answers(id, title, exam_quiz_id, is_correct_ans)
submitted_answers(id, user_id, exam_quiz_id, exam_quiz_answer_id)
我已经设置了相应的模型和关系方法。
型号:
User, Examinee, ExamQuiz, ExamQuizAnswer, SubmittedAnswer
关系:
// User -> hasOne() -> Examinee
$user->examinee
// ExamQuiz -> hasMany() -> ExamQuizAnswer
$examQuiz->examQuizAnswers
// SubmittedAnswer -> hasMany() -> ExamQuiz
$submittedAnswer->examQuizzes
// SubmittedAnswer -> hasMany() -> ExamQuizAnswer
$submittedAnswer->examQuizAnswers
// User -> hasMany() -> SubmittedAnswer
$user->submittedAnswers
在我看来,如何显示姓名、总回答和总正确 对于同时也是考生的每个用户,在 table 中是这样的:
<tr>
<th>Name</th>
<th>Answered</th>
<th>Correct</th>
</tr>
@foreach()
{{-- I have no idea what to do here --}}
<tr>
<td></td>
<td></td>
<td></td>
</tr>
@endforeach
循环您的 $users 并回显您想要的 3 个字段。大致是这样的:
{{ $user->name }}
{{ $user->submittedAnswers->examQuizAnswers()->where('is_correct_answer', 1)->get()->count() }}
{{ $user->submittedAnswers->examQuizAnswers->count() }}
但是为了 children.
请不要实际查询视图文件
在您的控制器中预先加载相关模型:
User::with(['submitted_answers', 'submitted_answers.exam_quiz_answers'])->get()
在你的控制器中,你让用户通过它来查看。
$users = User:get();
并创建一个 foreach 循环来获取答案和正确答案:
<tr>
<th>Name</th>
<th>Answered</th>
<th>Correct</th>
</tr>
@foreach($users as $user)
<tr>
<td>{{$user->name}}</td>
<td>{{count($user->submittedAnswers()->get())}}</td>
@php
foreach($user->submittedAnswers()->get() as $answer){
foreach($answer->examQuizAnswers->get() as $quiz){
$count = $quiz->where('is_correct_answer',1)->count()
}
}
@endphp
<td>{{$count}}</td>
</tr>
@endforeach
但是您当然可以在模型中编写一个方法来检索正确答案。而只是调用该方法。
您可以在用户模型中编写这样的方法:
public function get_correct_answers($user_id){
$user = User::whereId($user_id)->first();
foreach($user->submittedAnswers()->get() as $answer){
foreach($answer->examQuizAnswers->get() as $quiz){
$count = $quiz->where('is_correct_answer',1)->count()
}
}
return $count;
}
然后在视图中,您只需像这样调用该方法:
<tr>
<th>Name</th>
<th>Answered</th>
<th>Correct</th>
</tr>
@foreach($users as $user)
<tr>
<td>{{$user->name}}</td>
<td>{{count($user->submittedAnswers()->get())}}</td>
<td>{{$user->get_correct_answers($user->id)}}</td>
</tr>
@endforeach
我有这样的数据库结构:
表:
users(id, email, password, ...) //default laravel users table
examinees(id, user_id, ...)
exam_quizzes(id, title, explanation)
exam_quiz_answers(id, title, exam_quiz_id, is_correct_ans)
submitted_answers(id, user_id, exam_quiz_id, exam_quiz_answer_id)
我已经设置了相应的模型和关系方法。
型号:
User, Examinee, ExamQuiz, ExamQuizAnswer, SubmittedAnswer
关系:
// User -> hasOne() -> Examinee
$user->examinee
// ExamQuiz -> hasMany() -> ExamQuizAnswer
$examQuiz->examQuizAnswers
// SubmittedAnswer -> hasMany() -> ExamQuiz
$submittedAnswer->examQuizzes
// SubmittedAnswer -> hasMany() -> ExamQuizAnswer
$submittedAnswer->examQuizAnswers
// User -> hasMany() -> SubmittedAnswer
$user->submittedAnswers
在我看来,如何显示姓名、总回答和总正确 对于同时也是考生的每个用户,在 table 中是这样的:
<tr>
<th>Name</th>
<th>Answered</th>
<th>Correct</th>
</tr>
@foreach()
{{-- I have no idea what to do here --}}
<tr>
<td></td>
<td></td>
<td></td>
</tr>
@endforeach
循环您的 $users 并回显您想要的 3 个字段。大致是这样的:
{{ $user->name }}
{{ $user->submittedAnswers->examQuizAnswers()->where('is_correct_answer', 1)->get()->count() }}
{{ $user->submittedAnswers->examQuizAnswers->count() }}
但是为了 children.
请不要实际查询视图文件在您的控制器中预先加载相关模型:
User::with(['submitted_answers', 'submitted_answers.exam_quiz_answers'])->get()
在你的控制器中,你让用户通过它来查看。
$users = User:get();
并创建一个 foreach 循环来获取答案和正确答案:
<tr>
<th>Name</th>
<th>Answered</th>
<th>Correct</th>
</tr>
@foreach($users as $user)
<tr>
<td>{{$user->name}}</td>
<td>{{count($user->submittedAnswers()->get())}}</td>
@php
foreach($user->submittedAnswers()->get() as $answer){
foreach($answer->examQuizAnswers->get() as $quiz){
$count = $quiz->where('is_correct_answer',1)->count()
}
}
@endphp
<td>{{$count}}</td>
</tr>
@endforeach
但是您当然可以在模型中编写一个方法来检索正确答案。而只是调用该方法。 您可以在用户模型中编写这样的方法:
public function get_correct_answers($user_id){
$user = User::whereId($user_id)->first();
foreach($user->submittedAnswers()->get() as $answer){
foreach($answer->examQuizAnswers->get() as $quiz){
$count = $quiz->where('is_correct_answer',1)->count()
}
}
return $count;
}
然后在视图中,您只需像这样调用该方法:
<tr>
<th>Name</th>
<th>Answered</th>
<th>Correct</th>
</tr>
@foreach($users as $user)
<tr>
<td>{{$user->name}}</td>
<td>{{count($user->submittedAnswers()->get())}}</td>
<td>{{$user->get_correct_answers($user->id)}}</td>
</tr>
@endforeach