如何使用 laravel 将表单字段保存在 2 个表中

Posted

技术标签:

【中文标题】如何使用 laravel 将表单字段保存在 2 个表中【英文标题】:how to save the form fields in 2 tables using laravel 【发布时间】:2017-03-20 14:24:49 【问题描述】:

我是laravel的新手。我需要将表单字段一个保存在一个表中,另一个保存在laravel的另一个表中。这两个表具有外键引用。在一个表中保存了数据,但另一个无法保存数据库。任何人都可以为此提出建议吗?

提前谢谢

表格问题: ID, 考试编号, 问题

表答案: ID, question_id, 选项, 答案

模型 1:

     namespace App;

     use Illuminate\Database\Eloquent\Model;

     class Question extends Model
        
         protected $table='question'; 

      public function answer()
        
    return $this->hasMany('Answer');
      
      

模型 2:

<?php

    namespace App;
   namespace App\Http\Controllers;
    use Illuminate\Database\Eloquent\Model;

    class Answer extends Model 
   

      protected $table='answer'; 


       public function question()
  
     return $this->BelongsTo('Question');
    

       

添加问题页面

     public function add_question()
     
     $exam =DB::table('exam')->select(array('id', 'exam_name'))->get();
     return view('add_question')->with('exam',$exam);
       
     //it shows the form page

验证问题和答案详情并将其保存到数据库中

     public function validate_question()
          
     $rules = array(
       'question'=>'required|max:300'

      );
         $validator = Validator::make(Input::all(), $rules);

        if ($validator->fails())
          
      return edirect::back()->withErrors($validator,'login')->withInput(Input::except('question'));

              
            else
           
           $question =new  Question;
          $question->exam_id   = Input::get('exam_id');
         $question->question  = Input::get('question');
           $question->save();
       if($question->save())
        $answer  =new Answer;
         $answer ->options  = Input::get('options');
     $answer ->answers  = Input::get('answers');
       $question->answer()->save($answer);
    
         

        Session::flash('message', 'Successfully created question record!');
       return Redirect::to('question');
       

我有错误:

HomeController.php 第 261 行中的 FatalErrorException:找不到类“App\Answer”。

请任何人对此提出建议

【问题讨论】:

你已经尝试了什么? 提供你的存在代码来解决你的问题!! 感谢您的回复 Mr.Amit 和 Mr.Rimon。我包含了我的代码。我犯了什么错误。请您给我建议 【参考方案1】:

在您的 Answer 模型中,您已经为其命名了两次(可能是偶然的):

namespace App;
namespace App\Http\Controllers;

显然您的模型位于App 目录中,而不是Controllers,因此只需删除第二行即可。

另外,在引用关系时,您需要指定正确的路径,App\Question 而不是Question。在这一点上,您的 Question 模型也是如此。

您的Answer 模型应如下所示:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Answer extends Model 
  
    protected $table='answer'; 

    public function question()
    
        return $this->BelongsTo('App\Question');
        

【讨论】:

感谢 James 先生的回复。我使用了您的代码,但出现此错误:SQLSTATE[42S22]: Column not found: 1054 Unknown column 'answers' in 'field list' (SQL: update question set id = , question = ques, answers = , options = opt where id is null).如何将它保存到数据库中。请建议我

以上是关于如何使用 laravel 将表单字段保存在 2 个表中的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 刀片:如何删除预先填充的表单字段数据(在 db 中另存为空)

动态添加字段到 laravel 表单

Laravel 保存多部分表单

Laravel(Livewire)中的组件拆分和保留参数

如何使laravel中的动态表单字段可填写

在 Laravel 5 中将多行从动态表单保存到数据库