Laravel 11x中按id_question关联显示问答表数据的问题
问题描述
我可以向question表和answer表录入数据,但在根据id_question关联显示对应数据时遇到问题——现在会显示answer表中的全部数据,而不是对应单个问题的答案。
表结构示例
question表
| Id | question |
|---|---|
| 1 | The correct answer is |
| 2 | How old is Ani? |
answer表
| Id | id_question | answer |
|---|---|---|
| 1 | 1 | give |
| 2 | 1 | given |
| 3 | 1 | gave |
| 4 | 1 | gain |
| 5 | 2 | 8 years old |
| 6 | 2 | 9 years old |
| 7 | 2 | 10 years old |
| 8 | 2 | 11 years old |
当前控制器代码
public function questionDashboard(){ $questions = Question::with('answers')->get(); $answers = Answer::with('questions')->get(); return view('admin.questionDashboard', ['questions'=>$questions, 'answers'=>$answers]); }
解决方法
1. 精简控制器代码
你不需要单独查询所有Answer数据,Question::with('answers')已经通过预加载机制,把每个问题对应的关联答案都查询并关联好了。修改后的控制器代码如下:
public function questionDashboard(){ $questions = Question::with('answers')->get(); return view('admin.questionDashboard', compact('questions')); }
2. 确认模型关联正确性
确保Question模型中定义了正确的一对多关联:
// app/Models/Question.php class Question extends Model { public function answers() { // 参数依次为关联模型、外键(answer表中的id_question)、主键(question表中的id) return $this->hasMany(Answer::class, 'id_question', 'id'); } }
若需要反向关联,Answer模型的关联可保留:
// app/Models/Answer.php class Answer extends Model { public function questions() { return $this->belongsTo(Question::class, 'id_question', 'id'); } }
3. 视图中正确遍历关联数据
在admin/questionDashboard.blade.php视图里,通过问题对象直接访问其关联的答案集合,而非遍历所有答案:
@foreach($questions as $question) <div class="question-item"> <h4>{{ $question->question }}</h4> <div class="answers-list"> @foreach($question->answers as $answer) <p>{{ $answer->answer }}</p> @endforeach </div> </div> @endforeach
这样就能实现每个问题仅展示自身对应的答案,不会再出现显示全部答案的问题。
内容的提问来源于stack exchange,提问作者Tan Jaya
相关产品推荐
相关产品推荐

