拉拉维尔 连续删除记录不符合预期



我正在使用资源控制器通过将集合传递到视图中来删除行中的记录。

查看

<tbody>
@php $count=1; @endphp
@forelse ($products as $product)
<tr>
<td>{{ $count }}</td>
<td>{{ $product->name }}</td>
<td>{{ $product->slug }}</td>
<td>{{ $product->updated_at }}</td>
<td><span class="label label-success">Published</span></td>
<td>
<div class="btn-group">
<a href="/products/{{ $product->slug }}" class="btn btn-default btn-xs">View</a>
<a href="/account/edit-product-{{ $product->slug }}" class="btn btn-warning btn-xs">Edit</a>
<a href="{{ route('products.destroy', $product->slug) }}" class="btn btn-danger btn-xs" onclick="event.preventDefault();document.getElementById('delete-product').submit();">Delete</a>
<form id="delete-product" method="POST" action="{{ route('products.destroy', $product->slug) }}" style="display: none;">
@csrf
@method('DELETE')
</form>
</div>
</td>
</tr>
@php $count++; @endphp
@empty
<tr>
<td colspan="6">No products yet.</td>
</tr>
@endforelse
</tbody>

控制器

public function products()
{
$products = Product::orderBy('created_at', 'desc')->paginate(10);
return view('vendor.products')->with('products', $products);
}
public function destroy(Product $product)
{
$product->delete();
return redirect('/account/products')->with('success', 'Product deleted successfully.');
}

当我单击任何"删除"按钮时,它会删除最后一篇文章(数据库中的第一篇文章,因为它是按降序排序的(。

有人可以告诉我哪里出了问题吗?我认为最初代码工作得很好,直到我进行其他一些修改并且它"神奇地"没有按预期工作。

编辑: 路线:

Route::prefix('/account')->group(function () {
Route::get('/products', 'AccountController@products');
Route::get('/corporate-info', 'AccountController@corporateInfo');
Route::get('/add-product', 'ProductController@create');
Route::get('/edit-product-{product}', 'ProductController@edit');
});
Route::resource('products', 'ProductController');

产品型号:

public function getRouteKeyName()
{
return 'slug';
}

哦,这是你的问题:

<a href="{{ route('products.destroy', $product->slug) }}" class="btn btn-danger btn-xs" onclick="event.preventDefault();document.getElementById('delete-product').submit();">Delete</a>
<form id="delete-product" method="POST" action="{{ route('products.destroy', $product->slug) }}" style="display: none;">
@csrf
@method('DELETE')
</form>

您在循环时为每个表单提供相同的 ID "delete-product",因此无论何时

document.getElementById('delete-product'(.submit((;

它获取并提交带有删除产品ID的表单,这是由于覆盖问题以解决您的问题的最后一个表单:

<a href="{{ route('products.destroy', $product->slug) }}" class="btn btn-danger btn-xs" onclick="event.preventDefault();document.getElementById('delete-product-{{$product->slug}}').submit();">Delete</a>
<form id="delete-product-{{$product->slug}}" method="POST" action="{{ route('products.destroy', $product->slug) }}" style="display: none;">
@csrf
@method('DELETE')
</form>

最新更新