首页 > 解决方案 > BadMethodCallException:Laravel 中不存在方法 Illuminate\Database\Eloquent\Collection::update

问题描述

我在 Laravel-5.8 中有这个更新控制器

  $leavetype = HrLeaveType::findOrFail($id);
  $leavetype->leave_type_name             = $request->leave_type_name;
  $leavetype->leave_type_code             = $request->leave_type_code;
  $leavetype->description                 = $request->description;
  $leavetype->company_id                  = Auth::user()->company_id;
  $leavetype->created_by                  = Auth::user()->id;
  $leavetype->created_at                  = date("Y-m-d H:i:s");
  $leavetype->is_active                   = 1; 
  
  $leavetype->save();                         

  $employeetypes = HrLeaveTypeDetail::where('leave_type_id', $id)->get();

  foreach ($employeetypes as $key => $employeetypes){
    $leavetypedetail = HrLeaveTypeDetail::where('leave_type_id', $id)->get();

    $insert_array = [
        'no_of_days'                        => $request->no_of_days[$key],
        'employee_type_id'                  => $request->employee_type_id[$key],     //$request->employee_type_id[$key],    
        'weekend_inclusive'                 => isset($request["weekend_inclusive$key"]) ? 1: 0,
        'leave_type_id'                     => $leavetype->id,
    ];                

    $leavetypedetail->update($insert_array);
  }

看法

  @foreach($leavetypedetails as $key => $leavetypedetail)
     <tr>
       <td width="5%">
            {{$key+1}}
       </td>                             
       <td width="30%">  
            <span>{{$leavetypedetail->employeetype->employee_type_name}}</span> 
       </td>
       <td style="display: none">  
          <input type="hidden" name="employee_type_id[]" value="{{$leavetypedetail->employeetype->employee_type_name}}" class="form-control employee_type_id">
       </td>                                
       <td width="20%"><input type="number" name="no_of_days[]" value="{{$leavetypedetail->no_of_days}}" placeholder="Enter leave days here" class="form-control no_of_days" max="120">
       </td>                                                               
       <td width="10%"><input type="checkbox" name="weekend_inclusive{{$key}}"  class="form-control" data-bootstrap-switch data-off-color="danger" data-on-color="success" data-off-text="NO" data-on-text="YES" value="1" {{  ($leavetypedetail->weekend_inclusive == 1 ? ' checked' : '') }}></td>                         
     </tr>
  @endforeach

当我提交表单时,我收到了这个错误:

BadMethodCallException: 方法 Illuminate\Database\Eloquent\Collection::update 不存在 app\Http\Controllers\Leave\LeaveTypesController.php(268): Illuminate\Support\Collection->__call('update', Array)

它指向这里:

$leavetypedetail->update($insert_array);

我该如何解决?

谢谢

标签: laravel

解决方案


  $leavetypedetail = HrLeaveTypeDetail::where('leave_type_id', $id)->get();

因为您使用的是 'get()' .... $leavetypedetail 现在是一个集合,而不是查询构建器的实例,并且该集合没有更新方法

你可以替换:

  $leavetypedetail->update($insert_array);

和:

 HrLeaveTypeDetail::where('leave_type_id', $id)->->update($insert_array);

推荐阅读