#laravel #laravel-8
Вопрос:
Я хочу forceDelete
опубликовать архивный счет-фактуру, но он выдает ошибку:
Вызов функции-члена forceDelete() при нулевом значении
Когда я пишу код в названном методе контроллера destroyarchieve()
, я пишу это return $request;
.
Это говорит мне id
request
о том, и о том, и вот оно, и я хочу знать, почему оно не вернуло мне id
то, и это говорит мне только invoice id
:
{
"_token": "NkNlrJx1y5vrsPYnrTGuoTL3iBlomJp6NOl9SOQw",
"_method": "DELETE",
"invoice_id": "16"
}
Когда я dd($id)
его верну 19
. Затем, когда я запускаю этот код:
public function destroyarchieve(Request $request, $id) {
// dd($id);
// return $request;
$i = invoices::find($id);
$i->forceDelete();
return back();
}
Это приводит к ошибке.
Вот моя form
страница с кнопочным лезвием:
<form action="{{ route('in.destroyarchieve', $i->id) }}" method="POST">
@method('DELETE')
@csrf
<input type="hidden" value="{{ $i->id }}" name="invoice_id">
<button type="submit">delete</button>
</form>
И мой маршрут web.php
:
Route::delete('inarchieve/{id}', [AppHttpControllersInvoicesController::class, 'destroyarchieve'])
->name('in.destroyarchieve');
И мой контроллер:
public function destroyarchieve(Request $request, $id) {
// dd($id);
// return $request;
$i = invoices::find($id);
$i->forceDelete();
return back();
}
Ответ №1:
Не отправляйте тело в действии удаления, удалите:
<input type="hidden" value="{{ $i->id }}" name="invoice_id">
Вы можете отправлять id
только по URL-адресу, и вы можете сделать вот так:
public function destroyarchieve($id) {
$i = invoices::findOrFail($id);
$i->forceDelete();
return back();
}
Убедитесь id
, что действие, отправленное в форме, является правильным:
{{ route('in.destroyarchieve', $i->id) }}
Комментарии:
1. Он также может воспользоваться неявной привязкой , поэтому ему не нужно писать
$i = invoices::findOrFail($id);
, так как он уже сделает это за вас.2. да , привязка модели-хорошая функция , он может это сделать : публичная функция destroyarchieve(Счет-фактура $счет-фактура) {} в маршруте : Маршрут::удалить («inarchieve/{счет-фактура}», [ПриложениеHttpКонтроллерыInvoicesController::класс, «destroyarchieve»]) — >имя(«in.destroyarchieve»);