Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 拉威尔5测验项目_Php_Jquery_Laravel 5.1 - Fatal编程技术网

Php 拉威尔5测验项目

Php 拉威尔5测验项目,php,jquery,laravel-5.1,Php,Jquery,Laravel 5.1,这可能更像是一个概念性的问题,但我正试图找到一种最好的方式来创建一个视图,一次显示一个测验问题并检查答案 目前我的MySQL表有以下列:id、category\u id、quick\u question、answer\u one、answer\u two、answer\u three、correct\u answer 我的控制器使用以下内容获取测验问题: $quizzes = Quiz::where('category_id',$category_id)->simplePaginate(1

这可能更像是一个概念性的问题,但我正试图找到一种最好的方式来创建一个视图,一次显示一个测验问题并检查答案

目前我的MySQL表有以下列:id、category\u id、quick\u question、answer\u one、answer\u two、answer\u three、correct\u 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.
{{$quick->quick\u question}
{{$quick->答案}
{{$quick->正确答案}
{{$quick->答案{two}等等。
可能只是打算使用JavaScript/JQuery来检查正确答案


从概念上讲,这是一种非常糟糕的方法,我仍然不确定如果答案来自同一个DB表,那么如何随机排列答案的顺序。总的来说,是否有更好的方法(显示1个测验问题,并以随机顺序显示答案,在没有DB查询的情况下进行检查)?提前感谢。

不要以任何形式将答案保存在客户端。

取而代之的是,只需在客户端获取问题并将其分页即可。如果您确实需要逐个验证答案,那么启动AJAX请求

或者,您可以让用户尝试整个测验,然后将问题与用户的答案一起发布,并在服务器端验证。然后返回结果/分数/答案

关于您关于在没有DB查询的情况下进行检查的查询,您不应该这样做。如果您确实需要它,那么将答案保存在对象中,而不是保存在DOM中。再说一遍,不能再“不推荐”了

编辑:

你应该先把它分成几张表。如果没有第一个表的修改,就不能随机化选项的显示顺序

不要像回答1、回答2、回答3、纠正回答那样命名列。以这种方式,通过列名
correct\u answer
识别中答案的唯一方法。列名不应该给出关于正确答案的提示。它应该存放在别的地方

  • 问题

    id
    question - the question body
    
  • 类别

    id
    category - name of the category
    
    id
    question_id
    category_id
    
  • 问题类别(一个问题可能属于多个类别)

  • 选择权

    id
    question_id
    option - option text
    
  • 答复

    id
    question_id
    option_id
    
  • 现在你要做的是随机排列选项的顺序

    $questions = Question::where('category_id', $category_id)->
                 with(['options' => function ($query) {
                   $query->orderBy(DB::raw('RAND()'));
                 }])
                 ->get();
    
    为了对选项进行随机排序,我们使用了
    orderbyrand()

    现在您只需发送
    选项\u id
    ,就可以在服务器端检查答案是否正确

    编辑-3月27日 您可以使用以下模型

  • 问题:
  • 问题类别
  • 类别
  • 选择权
  • 答复
  • 您可以使用以下关系

  • 问题属于问题类别
  • 问题类别属于到类别
  • 这个问题有很多选择
  • 问题只有一个答案

  • 但是创建一个问题类别模型并不能很好地扩展。所以,如果你不想这样做,你可以使用多态关系。您可以使用category表来存储基本上所有类型的类别,而不仅仅是问题类别。在这种情况下,您需要修改
    categories
    表以添加分类类型。如果您不了解这种多态关系,请在官方的Laravel文档中找到它

    好的,谢谢,您是否知道如果答案来自同一个表,那么将答案随机化的最佳方法?AnthonyPham-如果答案来自同一个表,您不能直接在查询中进行随机化。您需要在应用程序级别执行此操作,例如PHP中的
    shuffle()
    。若要获得更好的解决方案,请参阅上面编辑的部分。@AnthonyPham您能帮助我详细说明如何在模型上解决此问题吗?模型属于哪一个?@user2040026我做了一些测验应用。当我这样做时,我确实将所有答案存储在答案表中(id、text、que_id、is_correct)。我在几个地方看到了你的建议。我希望这样做。但是,我需要知道,这样做的好处是什么?@SurajMalinga这叫做数据库规范化。我们基本上是分解表结构并减少冗余。在您的情况下,is_correct列是多余的。如果您是单个开发人员,这并不重要,但是当您与其他人一起工作时,他们将更好地理解您的体系结构。也许5年后,当你看到你的项目时,你会更好地理解正在发生的事情。