当前位置: 首页 > 知识库问答 >
问题:

BadMethodCallException:方法Illuminate\Database\Elquent\Collection::更新在Laravel中不存在

爱琪
2023-03-14

我在 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:Method Illuminate \ Database \口才\集合::更新不存在app \ Http \ Controllers \ Leave \ leavetypescontroller . PHP(268):Illuminate \ Support \ Collection-

它指向这里:

$leavetypedetail-

我该如何解决?

谢谢

共有2个答案

汤飞羽
2023-03-14
  $leavetypedetail = HrLeaveTypeDetail::where('leave_type_id', $id)->get();

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

您可以替换:

  $leavetypedetail->update($insert_array);

使用:

 HrLeaveTypeDetail::where('leave_type_id', $id)->->update($insert_array);
储国发
2023-03-14
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语句。您可以在不使用foreach循环的情况下更新多行

在这种情况下,可以使用以下代码:

  ... // other code here
  $leavetype->save();                         
  // after this line delete foreach and place only this code:

  $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,
  ];

  $employeetypes = HrLeaveTypeDetail::where('leave_type_id', $id)->update($insert_array);
 类似资料:
  • 我已经创建了一个视图来创建新的课程' create.blade.php '。我试图将这些数据存储在数据库中,但是我得到了以下错误: BadMethodCallException Method Illuminate\Http\Request::request 不存在。 我不确定是什么导致了这个错误,因为我已经在我的控制器中引用了请求名称空间。见下文; CoursesController.php; 创

  • 我正在使用Laravel 5.8,在这个项目中,我想从数据库中的一个表中删除一些数据,所以我在Blade上对其进行了编码: 这是路线: 这是WalletController的控制器销毁方法: 但是一旦我运行这个,我就会收到这个错误消息: 方法照亮\数据库\雄辩\集合::de不存在。 那么这里出了什么问题?我如何解决这个问题?

  • 我通常会用能言善辩的拉雷维尔分别选择我的物品 我得到的是一个照明\数据库\雄辩\收藏与一个项目。后来我把它们放在一个数组中,这样我就有了这些照明\数据库\雄辩\集合对象的数组。 然而,有时我需要更多,所以我会这样做: 这是一个包含多个项目的集合。有没有一个简单的方法来改变一个照明\数据库\雄辩\集合的数组中的几个项目与单项照明\数据库\雄辩\集合? 我当然能做到: 但再次从DB中选择似乎是一个相当

  • 我正在使用laravel 5.5更新条目。问题是将主键“id”更改为“project_id”后出现的,主键是elequent默认主键。添加项目可以正常工作,但更新项目无法正常工作。这是我得到的错误。 方法save不存在。 这是我的模特。 这是我的控制器功能。

  • 前言 在前两篇文章中,向大家介绍了定义关联关系的源码,还有基于关联关系的关联模型加载与查询的源码分析,本文开始介绍第三部分,如何利用关联关系来更新插入关联模型。 hasOne/hasMany/MorphOne/MorphMany 更新与插入 save 方法 正向的一对一、一对多关联保存方法用于对子模型设置外键值: public function save(Model $model) { $

  • 我想验证我的表单输入,但它抛出我这个错误在我的Laravel.log文件 生产错误:消息为“Method[validateString]不存在”的异常“BadMethodCallException”在C:\xamplep\htdocs\testing\vendor\laravel\framework\src\Illuminate\Validation\Validator.php中:2405 这是我