所以这是我的问题,
对于学校项目我必须建立一个测验网站,其中普通用户应该能够进行测验,所以我必须显示与测验相关的所有问题以及与问题相关的所有答案,但是当我尝试这样做只显示与最终问题相关的答案。这是我的代码:
// 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
答案 0 :(得分:0)
重写你的return语句:
$data = [
'quiz' => Quiz::find($id),
'questions' => $questions,
'answers' => $answers
];
return View::make("quizzes.makeQuiz", $data);
您当前正在返回一个数组并尝试返回链式变量。很可能你的$questions
变量永远不会到达视图,因为你首先传递一个数组。
另外,由于某种原因,你试图两次收集Quiz
模型的事实是错误的。
另外 - 为什么要混合使用Eloquent
和Fluent
语句来获取模型?除非情况有所保证,否则坚持一方或另一方。