【问题标题】:Insert Array Into Database using Laravel 7使用 Laravel 7 将数组插入数据库
【发布时间】:2020-12-31 03:56:15
【问题描述】:

我想将候选语言信息插入数据库,并且只用于经过身份验证的用户。候选人可以添加更多语言。为经过身份验证的用户插入所有信息。经过身份验证的候选人也可以

这是我的查看代码:

  <form action="{{url('/candidate/addLanguage')}}" method="post">
      @csrf    
                         
    
       <!-- Education -->
       <div class="form with-line">
          <h5>Language  Proficiency</h5>
              <div class="form-inside">
                <!-- Add Education -->
            <div class="form boxed box-to-clone education-box">
<a href="#" class="close-form remove-box button"><i class="fa fa-close"></i></a>
    
 <div class="form-row">
  <div class="form-group col-md-6">
     <label for="inputEmail4"> Language</label>
     <input type="text" name="txt_language[]" class="form-control" id="inputEmail4" placeholder="Language">
      </div>
     <div class="form-group col-md-6">
    <label for="inputPassword4">Reading</label>
       <select name="txt_reading[]" id="" class="form-control">
       <option value="#" selected>Choose..</option>
      <option value="High">High</option>
        <option value="Medium">Medium</option>
        <option value="Low">Low</option>
    </select>
   </div>
 </div>
<div class="form-row">
     <div class="form-group col-md-6">
         <label for="inputEmail4"> Writing</label>
          <select name="txt_writing[]" id="" class="form-control">
           <option value="#" selected>Choose..</option>
           <option value="High">High</option>
           <option value="Medium">Medium</option>
           <option value="Low">Low</option>
         </select>
   </div>
 <div class="form-group col-md-6">
   <label for="inputPassword4">Speaking</label>
   <select name="txt_speaking[]" id="" class="form-control">
       <option value="#" selected>Choose..</option>
       <option value="High">High</option>
       <option value="Medium">Medium</option>
        <option value="Low">Low</option>
   </select>
  </div>
 </div>
</div>
    
<a href="#" class="button gray add-education add-box"><i class="fa fa-plus-circle"></i> Add Language</a>
</div>
</div>
<button type="submit" class="btn btn-success btn-sm float-right">Submit</button>
 </form>

我的控制器:

 public function addLanguage(Request $request){
    
        $candidateID =  Auth::guard('candidate')->user()->id;
        if (count($request->txt_language) > 0){
    
            foreach ($request->txt_language as $language => $l){
                   $data = array(
                    'candidate_id' =>  $candidateID,
                    'language' =>  $request->txt_language[$language],
                    'reading' =>  $request->txt_reading[$language],
                    'writing' =>  $request->txt_writing[$language],
                    'speaking' =>  $request->txt_speaking[$language],
                
                ) ;
                     Language::insert($data);
            }
        }
        return redirect('/candidate/referencesForm')->with('success','Language Information Save Successfully..');
    }

我收到此错误:

 Attempt to assign property 'candidate_id' of non-object

我错过了什么?我该如何解决这个错误?请帮忙

它的“dd($request->all());”输出:

array:5 [▼
  "_token" => "pcKuRe8xI8WzRYQefwY7GMw1Zo6vighrZ6k7PUNi"
  "txt_language" => array:3 [▼
    0 => "English"
    1 => "Bangla"
    2 => null
  ]
  "txt_reading" => array:3 [▼
    0 => "Medium"
    1 => "Medium"
    2 => "High"
  ]
  "txt_writing" => array:3 [▼
    0 => "High"
    1 => "Low"
    2 => "High"
  ]
  "txt_speaking" => array:3 [▼
    0 => "High"
    1 => "High"
    2 => "High"
  ]
]

jQuery 代码:

 $('.box-to-clone').show();
    $('.add-box').on('click', function(e) {
        e.preventDefault();
        var newElem = $(this).parent().find('.box-to-clone:first').clone();
        newElem.find('input').val('');
        newElem.prependTo($(this).parent()).show();
        var height = $(this).prev('.box-to-clone').outerHeight(true);
        $("html, body").stop().animate({ scrollTop: $(this).offset().top-height}, 600);
    });
    $('body').on('click','.remove-box', function(e) {
        e.preventDefault();
        $(this).parent().remove();
    });

【问题讨论】:

  • 我们觉得这个问题有点令人困惑..您能否添加更多关于您正在尝试的内容和您的期望的详细信息
  • 我有一个经过身份验证的候选人的“语言”表格。我想使用特定候选人的表格将数据插入数据库。候选人可以添加更多语言并全部插入该特定候选人。但我在“$language->candidate_id => $candidateID”这一行中收到此错误
  • 尝试 $data = Language::create([ $language->candidate_id => $candidateID, ..... ]);您缺少箭头
  • 现在“尝试获取非对象的属性 'candidate_id'”出现此错误。
  • 我的错,$data = Language::create([ 'candidate_id' => $candidateID, ..... ]);

标签: laravel laravel-7


【解决方案1】:

请遵循以下格式,

foreach ($request->txt_language as $language => $l){
    $data = new  Language;
    $data->candidate_id => $candidateID,
    $data->language =>  $request->txt_language[$language],
    $data->reading =>  $request->txt_reading[$language],
    $data->writing =>  $request->txt_writing[$language],
    $data->speaking =>  $request->txt_speaking[$language],                 
    $data->save();
}

希望这能解决您的问题。如果您遇到更多问题,请告诉我。

【讨论】:

  • 现在“尝试获取非对象的属性 'candidate_id'”出现此错误。
  • 是的,它的工作,但只适用于一排。我想为 1 位候选人添加乘法行。
【解决方案2】:

试试这个:

  public function addLanguage(Request $request){

    $candidateID =  Auth::guard('candidate')->user()->id;
   if(!empty($candidateID)){
    if (count($request->txt_language) > 0){
        foreach ($request->txt_language as $language => $l){
                 Language::create([
                 'candidate_id' =>  $candidateID,
                'language' =>  $l,
                'reading' =>  $request->txt_reading[$language],
                'writing' =>  $request->txt_writing[$language],
                'speaking' =>  $request->txt_speaking[$language],
           ]);
        }
       }
      return redirect('/candidate/referencesForm')->with('success','Language Information Save Successfully..');
    }
     abort(404);
}

【讨论】:

  • 数据保存到 DB 但如果我输入 2 行它得到 1 行。 print_r( $data) 仅显示 1 个数据。其他数据缺失。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-12-03
  • 1970-01-01
  • 2019-09-26
  • 2018-01-31
  • 2021-10-27
  • 2020-07-05
  • 2021-08-14
相关资源
最近更新 更多