即使在锚标记的 href 中设置了正确的 id,我的控制器也将 id 放在后面

Even though the correct id is set in the href of the anchor tag, my controller takes an id one behind

我有什么

blade.php 文件

<form action="cars/{{ $car->id }}" method="POST" class="pt-3">
    @csrf
    @method('delete')
    <button 
        type="submit"
        class="border-b-2 pb-2 border-dotted italc text-red-500"
    >
        Delete &rarr;
    </button>
</form>

Laravel

中的控制器
public function destroy($id)
{
    $car = Car::find($id)->first();

    $car->delete();

    return redirect('/cars');
}

问题

上面的controller,总是删除db中后一个id的记录。 例如请求中发送的id为14,控制器删除id为13的记录

我想提及的与此问题相关的另外两个重要细节是,

-> 我仔细检查了请求发送到的 url 并且 url 拥有正确的 ID。 所以它必须是失败的控制器。
-> 即使上面的控制器代码不起作用,下面的代码也能正常工作 很好。

   public function destroy(Car $car)
{
    $car->delete();

    return redirect('/cars');
}

我不明白为什么我在“Laravel 中的控制器”下键入的代码不起作用,而我直接在上面键入的代码却起作用。

routes/web.php

Route::get('cars', [App\Http\Controllers\CarsController::class, 'index'])->name('cars');
Route::get('cars/{id}/delete', [App\Http\Controllers\CarsController::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-2 border-dotted italc text-red-500"> Delete &rarr;</button>
</form>

控制器文件

find 替换为 findOrFail 并删除 first()。最后使用 $request->id.

获取 id
public function destroy(Request $request) {
    $car = Car::findOrFail($request->id);
    $car->delete();
    return redirect()->route('cars');
}