#laravel
#laravel
Вопрос:
У меня есть этот контроллер обновления в 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
Когда я отправил форму, я получил эту ошибку:
Исключение badmethod callexception: метод IlluminateDatabase Eloquent Collection ::update не существует appHttpControllersLeaveLeaveTypesController.php (268): Подсветка Поддержка Коллекция-> __вызов (‘обновить’, Массив)
и он указывает здесь:
$leavetypedetail-> обновить($insert_array);
Как мне это решить?
Спасибо
Ответ №1:
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);
}
Метод запроса: ->get()
возвращает коллекцию, и в последней строке инструкции foreach вы вызываете update
для нее метод.
Вы должны вызвать метод обновления Model
для объектов или для Query
объектов.
Также у вас есть один ненужный оператор 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);
Ответ №2:
$leavetypedetail = HrLeaveTypeDetail::where('leave_type_id', $id)->get();
поскольку вы используете ‘get ()’ …. $leavetypedetail теперь является коллекцией, а не экземпляром построителя запросов,
и в коллекции нет метода обновления
вы можете заменить:
$leavetypedetail->update($insert_array);
с:
HrLeaveTypeDetail::where('leave_type_id', $id)->->update($insert_array);