Laravel连续删除记录不符合预期

时间:2018-05-20 15:23:13

标签: php laravel laravel-5

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

查看

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

当我点击任何&#34;删除&#34;按钮,它删除最后一篇文章(数据库中的第一篇文章,因为它按降序排序)。

有人能告诉我哪里错了吗?我认为最初代码工作得很好,直到我做了一些其他的修改,并且它是&#34;神奇地&#34;没有按预期工作。

编辑: 路线:

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';
    }

1 个答案:

答案 0 :(得分:1)

哦,这是你的问题:

Piecewise((x + 4.3, x + 4.3 < 12.9), (x/5 + 11.18, x/5 + 11.18 <= 13.5))

每当您

时循环,您都会为每个表单提供相同的ID“delete-product”
  

的document.getElementById( '删除副产物')提交();

它获取并提交带有删除产品ID的表单,这是由于最重要的问题解决您的问题而导致的最后一个:

 <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>