Laravel 4 - 嵌套结果

时间:2013-11-12 03:25:33

标签: php laravel-4 eloquent

我是php和larval的新手。我有以下数据库表的问题和答案。每个问题都可以有多个答案,并在正确的答案字段中指出更正的答案。我试图用这样的答案列出问题

这是问题....   一个。第一个答案   湾第二个答案   C。第三个答案   d。第四个答案

我有以下代码:

public static function getMultipleChoiceQuestions($chapter)
{
    $data = DB::table('newQuestions')
        ->join('newAnswers', 'newQuestions.questionId', '=', 'newAnswers.questionId')
        ->where('chapterId', '=', $chapter)->orderBy('newQuestions.questionId')
        ->where('questionType', '=', "1")
        ->get();

    $questions = array('questionType' => $questionType, 'data' => $data);
    return $questions;
}

问题表:   chapterId   questionId   questionText

答案表:   answerId   questionId   answerText   correctAnswer

以下代码显示每个答案的问题。

<fieldset id="group_1">
    <p><div><input type="checkbox" class="checkall"> Check all</div></p>
    <div style="width:600px; height:300px; overflow: auto;">
        @foreach($questions['data'] as $question)
            <p><input name="your_name" value="{{ $question->questionId }}" id="{{ $question->questionId }}" type="checkbox" class="questionsOnPage" />
                {{ $question->questionText }}</p>
        @endforeach
    </div>
</fieldset>

我想列出问题然后回答下一个问题。

请帮忙!

1 个答案:

答案 0 :(得分:3)

我认为你需要进一步了解Eloquent。你应该可以做这样的事情。

以下是建立关系的方法。基于此,您的答案表名称必须为answers,并且需要一个名为question_id的列。虽然,您可以浏览文档以了解如何设置自定义表名和列名。

应用/模型/ Question.php

class Question extends Eloquent {

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

应用/模型/ Answer.php

class Answer extends Eloquent {

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

现在,一旦这些关系设置完毕,我们就可以真正使用Eloquent了。您可以使用刀片轻松地在视图中执行此类操作。

外部的foreach将遍历每个问题。内部foreach将显示属于当前问题的每个答案,然后转到下一个问题。

@foreach(Question::all() as $question)
    <h3>{{ $question->title }}</h3>
    <ul>
    @foreach($question->answers->all() as $answer)
        <li>{{$answer->text}}</li>
    @endforeach
    </ul>
@endforeach

您在那里看到的titletext属性,只需要是数据库中的列名。你应该改变那些与你的相匹配。

使用上面的示例,您应该能够根据需要设置样式并将其放置在表单中。现在它将在h3标签内显示问题,然后在下面显示答案的无序列表。