laravel update在我的本地计算机上运行良好,但在实时服务器上返回错误“从空值创建默认对象”

问题描述 投票:0回答:2

我有这个代码在我的本地机器上运行得很好,但在实时服务器上返回错误“从空值创建默认对象”,我检查了该值是否为空但不是。这段代码的作用是如果在数据库中找不到该值,创建一个新的其他更新,则创建工作得很好,但更新不能在实时服务器上运行,但可以在我的本地机器上运行。问题出现在程序的其他部分,其中$ id> = 1并且是这行$ ex-> subject = $ exams [$ i] ['value'];

public function saveExam(Request $request){
    if($request->id==""){
        return response()->json(['error'=>'Please select student']);
    }

    $exams=array_slice($request->exam,0,count($request->exam)-2);
    $class_rec=array_slice($request->exam,count($request->exam)-2,1);
   // return response()->json(['success'=>$class[0]['value']]);
    $data;
  $id=$request->id;
 $sess=settings_session::find(1);
 $session=$sess->session;
 $term=$sess->term;
 $id_num=0;

  $table;
  if($request->level=="primary"){
    $table="App\\exam_report";
    $id_num=exam_report::where('student_id',$id)->where('session',$session)->where('term',$term)->count();
  }else if($request->level=="nursery"){
    $table="App\\nursery_exam_report";
    $id_num=nursery_exam_report::where('student_id',$id)->where('session',$session)->where('term',$term)->count();
  }
  //else if($request->level=="pre-nursery"){
   // $table="App\\pnursery_exam_report";
  //}
  else if($request->secondary){
    $table="App\\secondary_exam_report";
  }
  if($id_num <= 0){
        for ($i=0; $i < count($exams) ; $i++) { 
         $ex=new $table;
        $ex->subject=$exams[$i]['value'];
        $i++;
        $ex->first_test=$exams[$i]['value'];
        $i++;
        $ex->second_test=$exams[$i]['value'];
        $i++;
        $ex->exam=$exams[$i]['value'];
        $i++;
        $ex->total=$exams[$i]['value'];
        $i++;
        $ex->grade=$exams[$i]['value'];
        $ex->student_id=$id;
        $ex->class=$class_rec[0]['value'];
        $ex->term=$term;
        $ex->session=$session;
        $ex->save();


    }
  }else if($id_num >=1){
    $exa=$table::where('student_id',$id)->first();
    $ids=$exa->id; 
    $id_it=$ids;
    for ($i=0; $i < count($exams) ; $i++) {
        $ex=$table::find($id_it);
        $ex->subject=$exams[$i]['value'];
        $i++;
        $ex->first_test=$exams[$i]['value'];
        $i++;
        $ex->second_test=$exams[$i]['value'];
        $i++;
        $ex->exam=$exams[$i]['value'];
        $i++;
        $ex->total=$exams[$i]['value'];
        $i++;
        $ex->grade=$exams[$i]['value'];
        $ex->student_id=$id;
        $ex->class=$exams[$i]['value'];
        $ex->term=$term;
        $ex->session=$session;
        $ids=$exa->id;
        $ex->save();
        $id_it++;

}

  }

  return response()->json(['success'=>'Success']);
}

它应该更新表,但错误是在$ ex-> subject = $ exams [$ i] ['value'],其中$ id> = 1

laravel
2个回答
0
投票

检查mysql远程服务器上的所有数据,排序规则和名称,同时检查大写字母(在Windows中,对于表格不重要,在Linux中它们可以)


0
投票

我找到了答案,问题是在数据库上,id不是按顺序排列的,每次我这样做

$exa=$table::where('student_id',$id)->first();

它选择了最高的id,当我尝试添加下一个不存在的id时,我得到了错误,但是在我的本地服务器上,我的数据库id排列得很好,我不知道为什么这个行为,解决方案我的问题是这条线我改变了

 $exa=$table::where('student_id',$id)->get();
    $ids=$exa->min('id'); 
    $id_it=$ids;

而不是拉第一条记录,我得到所有记录,并找到最低ID

© www.soinside.com 2019 - 2024. All rights reserved.