#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;
вместо того, чтобы извлекать первую запись, я получаю всю запись и нахожу минимальный идентификатор