检索与多个记录相关的多个记录

时间:2015-05-31 09:45:43

标签: php laravel laravel-4 eloquent blade

最近我问这个问题得到了一个答案,但遗憾的是没有解决问题,之后我没有得到更多答案,我真的需要解决这个问题。

好吧,所以我必须为我的学校做一个测验网站,用户应该能够参加测验,这个页面需要显示测验名称,与测验相关的问题以及与问题相关的答案。 我可以显示测验名称没有问题,我也可以显示问题,但由于某些原因,只显示与最终问题相关的答案。

这是我的代码:

public function playQuiz($id)
{

    // get all the questions associated to the selected quiz
    $questions = Question::where('quiz_id', $id)->get();

    // get all the answers associated to the questions
    foreach($questions as $question)
    {
        $answers = Answer::where('question_id', $question->id)->get();
    }

    $data = [
        'quiz'      => Quiz::find($id),
        'questions' => $questions,
        'answers'   => $answers
    ];

    return View::make("quizzes.playQuiz", $data);
}

$ id变量是我选择的测验的id,所以我应该能够检索与该id相关的所有数据,以及与该id的相关数据相关联的所有数据。

这是我的HTML(带刀片):

   <h3>{{ $quiz->name }}</h3>

    @foreach($questions as $question)

            <h4>{{ $question->question }}</h4>

            @foreach($answers as $answer)

                @if($answer->question_id == $question->id)

                        <p>{{ $answer->answer }}</p>

                @endif

            @endforeach

    @endforeach

我知道问题在于我从数据库中获得答案的方式,但我不知道如何解决它。非常感谢帮助!谢谢你的阅读!

*编辑

我的数据库方案如下:

我有

  • 一个名为测验的表,带有id,名称和描述。
  • 一个名为带有id,问题和外键的问题的表&#34; quiz_id&#34;
  • 一个名为答案的表,其中包含id,answer和外键&#34; question_id&#34;

测验可以有多个问题,但一个问题只能有一个测验, 一个问题可以有多个答案,但答案只能有一个问题。

我希望这是关于我的数据库的足够信息,谢谢你的帮助!

1 个答案:

答案 0 :(得分:0)

你应该使用Eloquent的关系来解决这个问题。点击此处:http://laravel.com/docs/4.2/eloquent#relationships

我目前看到的方式是您有三个与之合作的模型:QuizQuestionAnswer - 对吧?

根据您的问题,我收集了以下内容:

  • Quiz会有很多Question s
  • Answer将属于一个Question

因此,基于这些假设,我将这些模型充实......

注意:

  • 我还没有使用4.3一段时间,所以你可能需要修改一些代码,但它应该没问题
  • 以下模型假设您正在以雄辩期望的方式使用外键,如果不是,您可以将它们定义为关系方法的第二个参数(hasMany,belongsTo)

<强> Quiz.php

<?php

class Quiz extends Eloquent {

    protected $table = 'quiz'; // or whatever your table is

    public function questions()
    {
        return $this->hasMany('Question'); // this should be the model name
    }

}

<强> Question.php

<?php

class Question extends Eloquent {

    protected $table = 'question'; // or whatever your table is

    public function quiz()
    {
        return $this->belongsTo('Quiz'); // defining the inverse of the relation
    }

    public function answers()
    {
        return $this->hasMany('Answer');
    }

}

<强> Answer.php

<?php

class Answer extends Eloquent {

    protected $table = 'answer'; // or whatever your table is

    public function question()
    {
        return $this->belongsTo('Question');
    }

}

然后你的控制器变得很多清洁

<强>控制器

public function playQuiz($id)
{
    $quiz = Quiz::find($id);

    return View::make('quizzes', compact('quiz'));
}

查看

<h3>{{ $quiz->name }}</h3>

@foreach($quiz->questions as $question)

        <h4>{{ $question->question }}</h4>

        @foreach($question->answers as $answer)

            <p>{{ $answer->answer }}</p>

        @endforeach

@endforeach

如果您在执行上述任务时遇到任何问题,请告知我们,我们会尽力帮助您。一开始关系可能有点棘手,但是一旦你了解它们,你就永远不会回头。