从空值创建默认对象?
从空值创建默认对象?
Admin Controller
public function edit_portal_sub(Request $request) { $portal=Oex_portal::where('id',$request->id)->first(); $portal->name=$request->name; $portal->email=$request->email; $portal->mobile_no=$request->mobile_no; if($request->password!='') $portal->password=$request->password; $portal->update(); echo json_encode(array('status'=>'true','message'=>'Portal Successfully Updated','reload'=>url('admin/manage_portal'))); }
web.php(route)
Route::post('/admin/edit_portal_sub','Admin@edit_portal_sub');
edit_portal.blade(form)
@extends('layouts.app') @section('title','Edit Portal') @section('content')Edit Portal
@endsection
当我更新数据时,出现错误
message: "Creating default object from empty value" trace: [{file: "C:\xampp\htdocs\project\online_exm_sys\app\Http\Controllers\Admin.php", line: 243,…},…] 0: {file: "C:\xampp\htdocs\project\online_exm_sys\app\Http\Controllers\Admin.php", line: 243,…} 1: {function: "edit_portal_sub", class: "App\Http\Controllers\Admin", type: "->"}
当我更新数据并检查页面时,我遇到了错误,我不明白如何解决它...请帮助我,我是一个新的Laravel用户...这个错误有什么最佳解决方案,我为这个错误卡了2天...我尝试了每一个可能的解决方案。
问题的原因是在使用update方法时没有传递任何数据给模型。当直接修改模型属性时,例如$portal->name = "test";,需要使用save方法$portal->save();。而在使用update方法时需要按照以下方式操作:
$portal = Oex_portal::where('id', $request->id)->get()->first();
if ($portal) {
$data = [
'name' => $request->name,
'email' => $request->email,
'mobile_no' => $request->mobile_no,
];
if ($request->password != '') {
$data['password'] = $request->password;
}
$portal->update($data);
}
上述代码如果没有将字段添加到模型的fillable属性中,将会引发批量赋值异常。最好保持现有代码,并将update替换为save。
附注:为什么模型的名称中有下划线?为什么不使用OexPortal?