J'ai ce contrôleur de mise à jour dans 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);
  }

Vue

  @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

Lorsque j'ai soumis le formulaire, j'ai eu cette erreur:

BadMethodCallException: La méthode Illuminate \ Database \ Eloquent \ Collection :: update n'existe pas app \ Http \ Controllers \ Leave \ LeaveTypesController.php (268): Illuminate \ Support \ Collection -> __ call ('update', Array)

Et il pointe ici:

$ leavetypedetail-> mise à jour ($ insert_array);

Comment le résoudre?

Merci

0
midowu 28 sept. 2020 à 12:47

2 réponses

Meilleure réponse
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);
}

Méthode de requête: ->get() renvoie Collection et sur la dernière ligne de l'instruction foreach, vous appelez la méthode update dessus. Vous devez appeler la méthode de mise à jour sur les objets Model ou Query.

Vous avez également une instruction foreach inutile. Vous pouvez mettre à jour plusieurs lignes sans utiliser la boucle foreach

Dans ce cas, vous pouvez utiliser le code suivant:

  ... // 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);
0
Dharman 28 sept. 2020 à 10:05
  $leavetypedetail = HrLeaveTypeDetail::where('leave_type_id', $id)->get();

Puisque vous utilisez 'get ()' .... $ leavetypedetail est maintenant une collection, pas une instance du générateur de requêtes, et la collection n'a pas de méthode de mise à jour

Vous pouvez remplacer:

  $leavetypedetail->update($insert_array);

Avec:

 HrLeaveTypeDetail::where('leave_type_id', $id)->->update($insert_array);
0
OMR 28 sept. 2020 à 09:52