我有这个代码在我的本地机器上运行得很好,但在实时服务器上返回错误“从空值创建默认对象”,我检查了该值是否为空但不是。这段代码的作用是如果在数据库中找不到该值,创建一个新的其他更新,则创建工作得很好,但更新不能在实时服务器上运行,但可以在我的本地机器上运行。问题出现在程序的其他部分,其中$ 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
检查mysql远程服务器上的所有数据,排序规则和名称,同时检查大写字母(在Windows中,对于表格不重要,在Linux中它们可以)
我找到了答案,问题是在数据库上,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