You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel 11x中按id_question关联显示问答表数据的问题

问题描述

我可以向question表和answer表录入数据,但在根据id_question关联显示对应数据时遇到问题——现在会显示answer表中的全部数据,而不是对应单个问题的答案。

表结构示例

question表

Idquestion
1The correct answer is
2How old is Ani?

answer表

Idid_questionanswer
11give
21given
31gave
41gain
528 years old
629 years old
7210 years old
8211 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 04:33:18