обновление laravel хорошо работает на моем локальном компьютере, но на действующем сервере возвращает ошибку «Создание объекта по умолчанию из пустого значения»

#laravel

#laravel

Вопрос:

у меня есть этот код, который очень хорошо работает на моем локальном компьютере, но на действующем сервере возвращает ошибку «Создание объекта по умолчанию из пустого значения», я проверил, равно ли значение null, но нет. что делает фрагмент кода, если значение не найдено в базе данных, создайте новое другое обновление, создание работает очень хорошо, но обновление не работает на действующем сервере, но работает на моем локальном компьютере. проблема в другой части программы, где $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

Ответ №1:

Проверьте все данные, параметры сортировки и имена на удаленном сервере mysql, проверьте также заглавные буквы (в Windows заглавные буквы не имеют значения для таблиц, в Linux они имеют значение)

Ответ №2:

Я нашел ответ, проблема в том, что в базе данных идентификаторы расположены не последовательно, и каждый раз, когда я делаю это

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

он выбирает самый высокий идентификатор, и когда я пытаюсь добавить следующий идентификатор, которого не существовало, я получаю сообщение об ошибке, но на моем локальном сервере идентификаторы моей базы данных расположены хорошо, я не знаю, почему такое поведение, решение моей проблемы — это строка, которую я изменил

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

вместо того, чтобы извлекать первую запись, я получаю всю запись и нахожу минимальный идентификатор