Laravel 8:未定义索引

问题描述

我正在做一个问卷调查项目,但遇到一个错误提示

未定义索引:考试

这发生在我试图将响应存储到我的数据库时。

这是我的控制器代码

    public function store(Math $math)
    {
        $data = request()->validate([
            'responses.*.answer_id' => 'required','responses.*.question_id' => 'required'
        ]);

        $exam = $math->exams()->create($data['exams']);
        $exam->examanswers()->createMany($data['examanswers']);

        return 'Thank You';
    }

这是我的考试模型:

{
    use HasFactory;
    protected $fillable = ['exam'];

    public function math()
    {
        return $this->belongsTo(Math::class);
    }

    public function examanswers()
    {
        return $this->hasMany(ExamAnswer::class);
    }
}

问题模型:

{
    use HasFactory;
    protected $fillable = ['question'];

    public function math()
    {
        return $this->belongsTo(Math::class);
    }

    public function answers()
    {
        return $this->hasMany(Answer::class);
    }
}

数学模型:

{
    use HasFactory;
    protected $fillable = [
        'user_id','title','purpose','exam'
    ];

    public function user()
    {
        return $this->belongsTo(User::class);
    }

    public function questions()
    {
        return $this->hasMany(Question::class);
    }

    public function exams()
    {
        return $this->hasMany(Exam::class);
    }
}

请帮我查一下。

解决方法

request()->validate(RULES) 将返回一个包含所有现有 rules' indexes 的数组。它不会返回所有存在的数据,只会返回规则中和存在的数据。

阅读 $request->validate() 的工作原理。

例如:

如果您发送 home = 'Address'name = 'John'email = 123,但您的规则是:

$data = $request->validate([
    'home' => 'required','name' => 'required,]);

然后,如果您想使用 $data,您将拥有 (dd($data)):

  • $data['home']Address
  • $data['name']John

但是 email = 123 不会出现在 $data 中。