从空值创建默认对象?

8 浏览
0 Comments

从空值创建默认对象?

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

{{ csrf_field() }}
@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天...我尝试了每一个可能的解决方案。

0
0 Comments

问题的原因是在使用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?

0
0 Comments

问题出现的原因是在代码中创建了一个空的对象,并且没有给它赋予任何值。这可能会导致在后续的操作中出现错误。

解决方法是替换之前的代码段,将其改为使用`find`或`findorfail`方法来查找对象,并使用`save`方法保存更改。

具体的解决方法如下所示:

$portal=Oex_portal::find($request->id); //或者你也可以使用findorfail方法
$portal->save();

另外,在视图中,你提供的是邮件而不是id,因此也需要进行修正。修改代码如下所示:


通过以上的修改,你可以解决问题并成功创建默认对象。

0