我有什么
blade.php檔案
<form action="carls/{{ $car-> id }}" method="POST" class="pt-3">
@csrf
@method('delete' )
<button
type="submit"
class="border-b-2 pb-2邊框-點綴 italc 文字-紅色-500"
>
Delete →
</button>
</form>
Laravel中的控制器
public function destroy($id)
{
$car = Car::find($id)-> first();
$car->洗掉()。
return redirect('/cars') 。
}
問題
上述控制器,總是洗掉資料庫中落后一個id的記錄。
例如,如果請求中發送的id是14,控制器會洗掉id為13的記錄。
-> 我已經仔細檢查了發送請求的URL,該URL擁有正確的ID。
所以應該是控制器的問題。 我不明白為什么我在 "Laravel中的控制器 "下輸入的代碼不作業,而我在這上面直接輸入的代碼卻能作業。
uj5u.com熱心網友回復:
標籤:
-> 盡管上面的控制器代碼不作業,但下面的代碼卻能完全作業
public function destroy(Car $car)
{
$car->delete()。
return redirect('/cars') 。
}
routes/web.php
Route::get('carls', [AppHttpControllersCarsController::class, 'index'])->name('carls') 。
Route::get('car/{id}/delete', [AppHttpControllersCarsController::class, 'destroy'])->name('cars.destroy')。
blade.php檔案
我在路由中添加了表單動作。
<form action="{route('cars. destroy', $car->id)}}" method="POST" class="pt-3">
@csrf
@method('DELETE' )
<button type="submit" class="border-b-2 pb-2border-dotted italc text-red-500" > 洗掉→</按鈕>。
</form>
控制器檔案
將find改為findOrFail,并洗掉first()。最后使用$request->id獲取id。public function destroy(Request $request) {
$car = Car::findOrFail($request->id) 。
$car->洗掉()。
return redirect()->route('car')。
}
