我想要的是:
>获取用户在数据库中回答的等级(如果存在)并获得该答案的等级.
是)我有的:
>我有3个表,short_answer,sa_sa_answer,short_answer_answer.
>现在,short_answer表有问题,每个问题都有很多答案,位于short_answer_answer表中,等级也包含在那里,问题可以有1个或更多答案.
我有什么代码:
调节器
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>"; } }
问题是:
我只是得到答案,答案等于用户的答案.但是如果我有两个相同的答案和不同的等级和明显不同的问题怎么办?它可以选择错误的一个.
注意:我正在使用Laravel5.1
更新:表结构
SHORT_ANSWER
– 名称
– 题
sa_sa_answer
– short_answer_id
– short_answer_answer_id
short_answer_answer
– 回答
– 年级
我已经解决了这个问题,但没有人得到赏金,但是如果你能回答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}."; } }
这样可以优化循环,因此我们只需要查询数据库一次即可获得所有问题和答案.它还解决了问题中的问题,因为查询维护了问题和答案之间的关系,因此我们不会无意中为问题选择错误的答案.