【问题标题】:Creating default object from empty value? [duplicate]从空值创建默认对象? [复制]
【发布时间】:2020-11-04 14:09:11
【问题描述】:

管理控制器

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: "->"}

当我更新数据并检查页面时,我显示错误,我无法理解如何解决它......请帮助我是新的 laravel 用户......它的最佳解决方案是什么我卡住了这个错误 2 天......我尝试每一个可能的解决方案

【问题讨论】:

  • 我没有完全理解这个问题。你能试着更具体一点吗?你可以顺便使用 response()->json 来代替 json_encode。您能否尝试包括整个错误堆栈?

标签: php laravel laravel-5


【解决方案1】:

您正在模型上使用更新方法,而没有将任何数据传递给它。当您直接使用$portal-&gt;name = "test"; 修改模型属性时,您需要在使用更新时使用保存方法$portal-&gt;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);
}

以上将导致批量分配异常,而不将它们添加到模型中的可填充字段。你最好保留你所拥有的,只是保存而不是更新。

附言你的模特名字有下划线怎么办?为什么不使用 OexPortal

【讨论】:

    【解决方案2】:

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

    $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 }}">
    

    【讨论】:

      猜你喜欢
      • 2020-04-09
      • 1970-01-01
      • 2015-01-28
      • 2017-11-29
      • 2017-09-30
      • 2016-08-18
      • 2018-07-18
      • 2019-03-14
      相关资源
      最近更新 更多