我想要的:
grade
(如果存在)并获得答案的等级。 我有什么:
3
表,short_answer
,sa_sa_answer
和short_answer_answer
。 short_answer
表中有一个问题,每个问题在short_answer_answer
表中都有很多答案,并且等级也包含在其中,该问题可以有 1个或更多答案。 我拥有什么代码:
Controller
foreach($sa_question_id as $key => $value){
$sa = ShortAnswer::with('answers')->find($sa_question_id[$key]);
$possible_answers = [];
foreach($sa->answers as $possible_answer){
$possible_answers[] .= strtolower($possible_answer->answer);
}
if(in_array(strtolower($sa_answer[$key]), $possible_answers)){
$grade = ShortAnswerAnswer::where('answer', $sa_answer[$key])->get();
echo "plus +1. Grade is: " . $grade->grade . "<br>";
}
}
问题是:
我只是得到答案等于用户答案的答案。但是,如果我有两个相同的答案,不同的
grade
和明显不同的问题,该怎么办?它可以选择错误的一个。注意:我正在使用Laravel5.1
更新:表结构
short_answer
-name
-question
sa_sa_answer
-short_answer_id
-short_answer_answer_id
short_answer_answer
-answer
-grade
Update
我已经解决了这个问题,但是没有人获得赏金,但是如果您可以回答this question,那么我可以给您赏金加上 2 复选标记并进行投票,我真的需要更多帮助。它也与此问题有关。赏金将在3天后消失。
最佳答案
我们可以使用一个查询来解决此问题:
$questions = ShortAnswer::with('answers')
->whereIn('id', $sa_question_id)
->whereHas('answers', function ($query) use ($sa_answer) {
$placeholders = join(",", array_pad([], count($sa_answer), "?"));
$query->whereRaw("LOWER(answer) IN $placeholders", $sa_answer);
})
->get();
foreach ($questions as $question) {
foreach ($question->answers as $answer) {
echo 'plus +1. Grade is: ' + $answer->grade}.";
}
}
这样可以优化循环,因此我们只需为所有问题和答案查询一次数据库。它也解决了问题,因为查询保持了问题和答案之间的关系,因此我们不会无意中为问题选择错误的答案。
关于php - 如何使用Laravel Eloquent获取特定的成绩数据?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46355609/