从db获取与先前所选行关联的多行。 laravel 4.2 php

时间:2015-05-29 12:49:46

标签: php database laravel laravel-4 blade

所以这是我的问题,

对于学校项目我必须建立一个测验网站,其中普通用户应该能够进行测验,所以我必须显示与测验相关的所有问题以及与问题相关的所有答案,但是当我尝试这样做只显示与最终问题相关的答案。这是我的代码:

    // select the clicked quiz.
    $quiz = Quiz::find($id);

    // get all the question and answer records from db that are associated to the selected quiz.
    $questions = DB::table('questions')->where('quiz_id', $id)->get();

    foreach($questions as $question)
    {
        $answers = DB::table('answers')->where('question_id', $question->id)->get();
    }

    return View::make("quizzes.makeQuiz", [
        "quiz" => Quiz::find($id)
    ])->with('quiz', $quiz)->with('questions', $questions)->with('answers', $answers);

这里是html(使用刀片):

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

    @foreach($questions as $question)

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

        @foreach($answers as $answer)


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



        @endforeach            

    @endforeach

当我尝试在没有foreach的情况下执行此操作时,我会收到错误消息“尝试获取非对象的属性”#。我知道为什么我会得到这个错误,因为显然$ question不是一个对象。

非常感谢帮助!谢谢你的阅读!

编辑*

好吧所以我现在改变了我的代码:

    $questions = Question::where('quiz_id', $id)->get();

    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.makeQuiz", $data);

html基本相同,它返回测验和所有相关的问题。但不幸的是,它只返回与最终问题相关的答案,而每个问题有3个答案。我认为问题在于答案,但我不知道我在这里做错了什么:(请帮忙!谢谢!

*修改

我第二次问了这个问题,它解决了我的问题,这里是链接: retrieving multiple records associated to multiple records laravel 4.2

1 个答案:

答案 0 :(得分:0)

重写你的return语句:

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

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

您当前正在返回一个数组并尝试返回链式变量。很可能你的$questions变量永远不会到达视图,因为你首先传递一个数组。

另外,由于某种原因,你试图两次收集Quiz模型的事实是错误的。

另外 - 为什么要混合使用EloquentFluent语句来获取模型?除非情况有所保证,否则坚持一方或另一方。