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

Laravel关联保存问题:为choices表写入question_id时报错

问题解决:无法将Question的ID写入Choice的question_id字段(报错"Attempt to read property 'id' on int")

错误原因

  • 第一个循环foreach($questions as $question => $question_value)中的$question是数组的整数索引,并非创建后的Question模型实例。循环结束后$question保留最后一个索引值(整数类型),因此第二个循环里调用$question->id会触发类型错误。
  • 当前代码未建立问题与选项的对应关系,无法确定每个选项归属哪个问题。

解决方案

核心思路是创建问题后立即使用模型实例的ID关联对应选项,确保每个选项都能正确绑定到所属问题。以下是修正后的代码:

$questions = $request->question;
$choices = $request->choices;

// 循环创建问题,同时绑定对应选项
foreach ($questions as $index => $questionContent) {
    // 创建问题并获取模型实例
    $question = Question::create([
        'question' => $questionContent,
    ]);

    // 获取当前问题对应的选项(需确保前端提交的choices与question索引一一对应)
    $currentChoices = $choices[$index] ?? [];

    foreach ($currentChoices as $choiceContent) {
        Choice::create([
            'question_id' => $question->id, // 这里使用模型实例的ID,而非循环索引
            'choice' => $choiceContent,
        ]);
    }
}

额外注意事项

  • 确保模型设置可填充字段:
    • Question模型:protected $fillable = ['question'];
    • Choice模型:protected $fillable = ['question_id', 'choice'];
  • 验证前端请求结构:需保证question数组和choices数组的索引一一对应,即questions[0]的选项对应choices[0]的数组内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 14:05:01