Laravel Удалить запись в строке не так, как ожидалось - PullRequest
0 голосов
/ 20 мая 2018

Я использую контроллер ресурсов для удаления записи в строке, передав коллекцию в представление.

Представление :

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

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 голосов
/ 20 мая 2018

Ооо, вот ваша проблема:

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

Вы даете один и тот же идентификатор 'delete-product' для каждой формы во время цикла, поэтому всякий раз, когда вы

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

Получение и отправка формы с идентификатором delete-product, который является последним из-за переопределенной проблемы для решения вашей проблемы:

 <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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...