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

Laravel测验系统保存时出现Undefined array key 'answers'错误如何解决

问题根源

  • 初始方案重复存储答案:循环所有问题时,都将全局的$data['answers']全部插入到当前问题下,导致每个问题都关联了所有答案
  • 调整表单后报错:将字段结构改为questions[x][answers][]后,答案数据已经归属到每个questions数组的子元素下,你的验证规则和存储逻辑仍然在读取顶层的answers数组,自然会提示数组键不存在。

前端修改

修正old取值和错误提示路径,适配新的字段结构:

  1. 问题2的question字段old值改为{{ old('questions.2.question') }},对应的@error字段也改为questions.2.question
  2. 所有答案字段的old值改为对应层级,例如问题1的第一个答案old为{{ old('questions.1.answers.0') }},对应的@error字段也改为questions.1.answers.0,以此类推调整所有答案的old和error路径。

后端修改

1. 调整验证规则

将原有的answers相关验证改为适配新结构的规则:

$data = request()->validate([
    'title.title' => 'required',
    'questions.*.question' => 'required',
    'questions.*.answers.*' => 'required', // 校验每个问题下的所有答案
], [
    'title.title.required' => 'გთხოვთ, შეიყვანოთ ქვიზის სახელი.',
    'questions.*.question.required' => 'გთხოვთ, შეიყვანოთ შეკითხვა.',
    'questions.*.answers.*.required' => 'გთხოვთ, შეიყვანოთ პასუხი.'
]);

2. 调整存储逻辑

循环每个问题时,仅读取当前问题关联的答案,格式化后插入:

$storeQuiz = $quizzes->create($data['title']);
foreach ($data['questions'] as $q) {
    $question = $storeQuiz->questions()->create(['question' => $q['question']]);
    // 把当前问题的答案数组转为createMany要求的键值格式
    $answers = collect($q['answers'])->map(function ($answer) {
        return ['answer' => $answer];
    })->toArray();
    $question->answers()->createMany($answers);
}
return redirect('admin/quizzes');

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 15:54:04