我想要的:

  • 获取数据库中用户答案的​​grade(如果存在)并获得答案的等级。

  • 我有什么:
  • 我有3表,short_answersa_sa_answershort_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 -questionsa_sa_answer -short_answer_id -short_answer_answer_idshort_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/

    10-12 17:44
    查看更多