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

Laravel项目中如何展示参会者的自定义问题与对应答案?

解决自定义问题与答案展示的方案

首先,你猜的没错,我们确实需要在Participant和Answer之间建立一对多关系——毕竟每个参会者(Participant)会对应多个自定义问题的答案(Answer)。接下来一步步来实现:

1. 完善模型关联

先把你的Answer模型补全,同时给Participant模型添加关联到Answer:

Participant 模型

class Participant extends Model {
    // 已有的关联...
    public function registration(){
        return $this->belongsTo('App\Registration');
    }

    public function ticket_type(){
        return $this->belongsTo('App\TicketType');
    }

    // 添加:一个参会者对应多个答案
    public function answers(){
        return $this->hasMany('App\Answer');
    }
}

Answer 模型

class Answer extends Model {
    public function question(){
        return $this->belongsTo('App\Question');
    }

    // 补全:答案属于一个参会者
    public function participant(){
        return $this->belongsTo('App\Participant');
    }
}

2. 预加载关联避免N+1查询

为了避免视图循环时产生大量重复数据库查询,在控制器获取会议数据时,要预加载嵌套关联:

$congress = Congress::with([
    'registrations.customer',
    'registrations.participants.ticket_type.questions',
    'registrations.participants.answers.question'
])->find($congressId);

3. 在视图中展示问题与答案

现在把你标记<!-- Doubt -->的位置替换成如下代码,就能展示每个参会者对应的自定义问题和答案了:

@foreach ($participant->ticket_type->questions as $question)
    <dt>{{ $question->text }}</dt>
    {{-- 匹配参会者针对该问题的答案 --}}
    <dd>{{ $participant->answers->firstWhere('question_id', $question->id)->value ?? '未填写' }}</dd>
@endforeach

说明

  • 这里假设Question模型用text字段存问题内容(比如"Whats your phone?"),Answer模型用value字段存用户填写的答案,如果你字段名不同,记得对应修改。
  • 先获取当前参会者对应票型的所有自定义问题,再从参会者的答案集合中匹配对应问题的答案。
  • 用?? '未填写'处理用户未填写答案的边界情况。

额外提示

确保在存储注册信息时,正确将每个参会者的答案与participant_id、question_id关联后存入answers表,这样关联查询才能正常工作。

内容的提问来源于stack exchange,提问作者user9659025

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:23:16