【问题标题】:How to get a specific grade data using Laravel Eloquent?如何使用 Laravel Eloquent 获取特定的成绩数据?
【发布时间】:2017-09-22 01:42:22
【问题描述】:

我想要什么

  1. 获取数据库中用户回答的grade(如果存在)并获取该回答的等级。

我有什么

  1. 我有3 表、short_answersa_sa_answershort_answer_answer
  2. 现在,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>";
   }
}

问题是:

我只是得到答案等于用户答案的​​答案。但是,如果我有 两个 相同的答案和不同的 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 天后消失。

【问题讨论】:

  • 确实如此。我更新了它。请立即查看

标签: php laravel-5 eloquent


【解决方案1】:

我们可以使用单个查询来解决这个问题:

$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}."; 
    }
}

这优化了循环,因此我们只需查询数据库一次即可获取所有问题和答案。它还解决了问题中的问题,因为查询维护了问题和答案之间的关系,所以我们不会无意中为问题选择错误的答案。

【讨论】:

    【解决方案2】:

    这部分代码:

    $grade = ShortAnswerAnswer::where('answer', $sa_answer[$key])->get();
    

    您从ShortAnswerAnswer 获得的所有答案等于$sa_answer[$key],没有条件指出您从正确的问题中得到的答案是否符合您的预期。

    所以,要解决您的问题,您还需要指出问题所在。喜欢:

    $grade = ShortAnswerAnswer::where(['answer' => $sa_answer[$key], 'question_id' => $key])->get();
    

    P/s: 这部分:

    foreach($sa_question_id as $key => $value){
       $sa = ShortAnswer::with('answers')->find($sa_question_id[$key]);
       ...
    }
    

    那么,$sa_question_id[$key] 就是 $value

    【讨论】:

    • 这个在 laravel5.1 中可用吗? $grade = ShortAnswerAnswer::where([ ['answer', $sa_answer[$key]], ['question_id', $key], ])-&gt;get();
    • 我在short_answer_answer 表中没有字段question_id
    • 那么short_answer_answer表中的哪个字段来确定对应答案的问题呢?
    • $grade = ShortAnswerAnswer::where([ ['answer', $sa_answer[$key]], ['question_id', $key], ])-&gt;get(); 在 Laravel 5.3 中得到支持。
    • 我使用的是 laravel 5.1
    猜你喜欢
    • 1970-01-01
    • 2013-11-20
    • 2021-04-12
    • 1970-01-01
    • 2020-11-07
    • 2014-08-06
    • 2018-12-08
    • 2021-06-14
    相关资源
    最近更新 更多