从空值创建默认对象?

时间:2020-07-15 06:21:45

标签: php laravel laravel-5

管理控制器

public function edit_portal_sub(Request $request)
    {
        $portal=Oex_portal::where('id',$request->id)->get()->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::post('/admin/edit_portal_sub','Admin@edit_portal_sub');

edit_portal.blade(窗体)

@extends('layouts.app')
@section('title','Edit Portal')
@section('content')
    <!-- Content Wrapper. Contains page content -->
    <div class="content-wrapper">
        <!-- Content Header (Page header) -->
        <div class="content-header">
            <div class="container-fluid">
                <div class="row mb-2">
                    <div class="col-sm-6">
                        <h1 class="m-0 text-dark">Edit Portal</h1>
                    </div><!-- /.col -->
                    <div class="col-sm-6">
                        <ol class="breadcrumb float-sm-right">
                            <li class="breadcrumb-item"><a href="#">Home</a></li>
                            <li class="breadcrumb-item active">Edit Portal</li>
                        </ol>
                    </div><!-- /.col -->
                </div><!-- /.row -->
            </div><!-- /.container-fluid -->
        </div>
        <!-- /.content-header -->
        <section class="content">
            <div class="container-fluid">
                <div class="row">
                    <div class="col-12">
                        <!-- Default box -->
                        <div class="card">
                            <div class="card-body">
                                <form action="{{ url('admin/edit_portal_sub') }} " class="database_operation">
                                    <div class="row">
                                        <div class="col-sm-12">
                                            <div class="form-group">
                                                <label>Enter Name</label>
                                                {{ csrf_field() }}
                                                <input type="hidden" name="id" value="{{ $portal_info->email }}">
                                                <input type="text" value="{{ $portal_info->name }}" name="name" required="required" placeholder="Enter Name" class="form-control">
                                            </div>
                                        </div>
                                        <div class="col-sm-12">
                                            <div class="form-group">
                                                <label>Enter Email</label>
                                                <input type="text" value="{{ $portal_info->email }}" name="email" required="required" placeholder="Enter Email" class="form-control">
                                            </div>
                                        </div>
                                        <div class="col-sm-12">
                                            <div class="form-group">
                                                <label>Enter Mobile No</label>
                                                <input type="text" value="{{ $portal_info->mobile_no }}" name="mobile_no" required="required" placeholder="Enter Mobile No" class="form-control">
                                            </div>
                                        </div>
                                        <div class="col-sm-12">
                                            <div class="form-group">
                                                <label>Enter Password</label>
                                                <input type="password" name="password"  placeholder="Enter Password" class="form-control">
                                            </div>
                                        </div>
                                        <div class="col-sm-12">
                                            <div class="form-group">
                                                <button class="btn btn-primary"> Update</button>
                                            </div>
                                        </div>
                                    </div>
                                </form>
                            </div>
                            <!-- /.card-body -->

                            <!-- /.card-footer-->
                        </div>
                        <!-- /.card -->
                    </div>
                </div>
            </div>
        </section>
    </div>
@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: "->"}

何时更新数据并检查页面,我显示错误我无法理解如何解决... PLZ帮助新的laravel用户...解决此错误的最佳方法是2天..i尝试每一次可能的解决方案

2 个答案:

答案 0 :(得分:1)

我不确定,但是您可以替换这两行:

$portal=Oex_portal::where('id',$request->id)->get()->first();
$portal->update();

使用

$portal=Oex_portal::find($request->id); //you can use findorfail as well
$portal->save();

此外,您正在视图中提供电子邮件而不是id:

 <input type="hidden" name="id" value="{{ $portal_info->email }}">

答案 1 :(得分:0)

您正在模型上使用update方法,而没有将任何数据传递给它。当您使用$portal->name = "test";直接修改模型属性时,则需要在使用更新时使用保存方法$portal->save();

$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);
}

以上内容将导致质量分配异常,而不将其添加到模型的可填充字段中。您最好保留自己所拥有的,只保存而不是进行更新。

p.s。您的模型名称带有下划线是什么?为什么不选择OexPortal

相关问题