2015-12-12 72 views
1

這可能更多是一個概念性問題,但我試圖找到最佳方式來製作一次顯示一個測驗問題的視圖並檢查答案。Laravel 5測驗項目

目前我的MySQL表中有以下列:id,category_id,quiz_question,answer_one,answer_two,answer_three,correct_answer。

我的控制器使用下列拿到問答題:

$quizzes = Quiz::where('category_id',$category_id)->simplePaginate(1); 

在我看來,我通過做asnwer手動排序

{{$quiz->quiz_question }} 

<a onclick="this.innerHTML='Wrong'">{{ $quiz->answer_one }}</a> 
<a onclick="this.innerHTML='Right'">{{ $quiz->correct_answer }}</a> 
<a onclick="this.innerHTML='Wrong'">{{ $quiz->answer_two }}</a>...etc. 

的過程中,很可能只是要使用JavaScript/JQuery來檢查正確的答案。

從概念上講,這感覺就像是一個非常糟糕的方式來做到這一點,我仍然不確定如果他們是從這樣的相同的數據庫表如何隨機化答案的順序。總體而言,還有更好的方式來解決這個問題(顯示1測驗問題,並以隨機順序顯示答案,檢查沒有數據庫查詢)?提前致謝。

回答

2

不要以任何形式保留客戶端的答案。

取而代之,只需在客戶端獲取問題並對其進行分頁即可。如果您絕對需要逐一驗證答案,請啓動AJAX請求。

或者您可以讓這個人嘗試整個測驗,並將問題與用戶的答案一起發佈並在服務器端進行驗證。然後你返回結果/分數/答案。

關於沒有DB查詢的檢查查詢,你不應該這樣做。如果你絕對需要它,然後將答案保存在一個對象中,而不是在DOM中。再次,它不能再被「不推薦」。

編輯:

你應該首先將其劃分爲這些表。如果沒有來自第一個表格的黑客,您無法隨機選擇顯示選項的順序。

並且不要命名像answer_one,answer_two,answer_three,correct_answer這樣的列。通過這種方式唯一能夠通過列名correct_answer識別答案的方法。列名不應該給出正確答案的暗示。它應該存儲在其他地方。

  1. 問題

    id 
    question - the question body 
    
  2. 類別

    id 
    category - name of the category 
    
  3. question_categories(一個問題可能屬於多個類別)

    id 
    question_id 
    category_id 
    
  4. 運蒸發散

    id 
    question_id 
    option - option text 
    
  5. 回答

    id 
    question_id 
    option_id 
    

現在你要做的就是隨機要得到隨機排序的選項,我們使用ORDER BY RAND()選項

$questions = Question::where('category_id', $category_id)-> 
      with(['options' => function ($query) { 
       $query->orderBy(DB::raw('RAND()')); 
      }]) 
      ->get(); 

的順序。

現在你只需發送option_id,可以檢查它是否在服務器端的正確答案。

編輯 - 3月27日

您可以使用下列型號。

  1. 問題
  2. QuestionCategory
  3. 類別
  4. 選項
  5. 回答

您可以使用下面的關係。

  1. 問題屬於關聯QuestionCategory
  2. QuestionCategory屬於關聯類別
  3. 問題的hasMany選項
  4. 問題hasOne答案

但創建一個QuestionCategory模型並沒有真正很好地擴展。所以,如果你不想這樣做,你可以使用多態關係。您可以使用類別表來存儲基本上所有類別的類別,而不僅僅是問題類別。在這種情況下,你需要修改categories表添加分類的類型。如果你不明白任何的這種多態關係的事情,請找它的官方Laravel文檔中https://laravel.com/docs/5.1/eloquent-relationships#polymorphic-relations

+0

好,謝謝,萬一你知道隨機化的答案的最佳途徑,如果他們都來自同一個表像來這個? –

+0

@AnthonyPham - 你不能做的隨機化查詢直接,如果他們是來自同一個表。您需要在應用程序級別執行此操作,例如在PHP中使用'shuffle()'。要獲得更好的解決方案,請參閱上面編輯的部分。 – user2040026

+0

@AnthonyPham你能幫助我如何解決這個型號擊穿?模型屬於哪個? – manshu