1

是)我有的

刀片.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');
}

问题

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

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

-> 我已经仔细检查了请求发送到的 url,并且 url 包含正确的 id。所以它必须是失败的控制器。
-> 即使上面的控制器代码不起作用,下面的代码也可以正常工作。

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

    return redirect('/cars');
}

我无法弄清楚为什么我在“Laravel 中的控制器”下键入的代码不起作用,而我直接在上面键入的代码起作用。

4

1 回答 1

0

路线/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');

刀片.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.

public function destroy(Request $request) {
    $car = Car::findOrFail($request->id);
    $car->delete();
    return redirect()->route('cars');
}
于 2021-09-16T05:13:03.093 回答