Laravel редактирование формы

В общем, я делаю мини-прилку которая пока что может добавлять товары, выводить список товаров, выводить один товар и последнее - редактировать, то , в чем у меня проблемы. Собественно, у меня есть контроллер он должен быть рабочий, но в нем даже если и есть ошибка, до нее дело не дошло. У меня есть несколько вариантов JS кода, один через ajax(через него должно редактироваться как и сама форма, так и теги) , второй просто через добавление класса и отправление запроса на сервер на удаление атрибута с классом todelete, и просто форма отправляется. Так вот, оно не работает, вообще. При нажатии на кнопку "сохранить изменения" не происходит ничего, кроме выполнения JS кода(логи пишут). Что-ж , дальше я кину код. Вот мой контроллер(в нем набросано все, но это только для тестов)

``` <?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Routing\Controller as BaseController;
use App\Models\Product;
use App\Models\User;
use Illuminate\Support\Facades\Log;

class ProductController extends BaseController
{
    
    public function isedit($id)
{
    // Проверяем, залогинен ли пользователь
    if (auth()->guest()) {
        // Если пользователь не залогинен, перенаправляем его на страницу регистрации
        return redirect('/register');
    }

    $product = Product::find($id);

    // Проверяем, имеет ли пользователь право редактировать этот продукт
    if ($product->user_id != auth()->id() && auth()->user()->role != 'admin') {
        // Если пользователь не является владельцем продукта и не является администратором, перенаправляем его обратно на страницу продукта
        return redirect('/product/' . $id)->with('error', 'У вас нет прав для редактирования этого продукта.');
    }

    if ($product) {
        return view('edit_product', ['product' => $product]);
    } else {
        return redirect('/')->with('error', 'Product not found.');
    }
}

    public function indexOfProducts()
    {
        $statuses = [
            'available' => 'Доступен',
            'unavailable' => 'Недоступен'
        ];
        $products = Product::all();

        return view('products_list', ['products' => $products,'statuses'=>$statuses]);
    }

    public function get()
    {
        $products = Product::available()->get();
        $users = User::where('role','user')->get();

        return response()->json([
            'products' => $products,
            'users' => $users
        ]);
    }
    
    public function showProduct($id)
    {
        $product = Product::with('attributes')->find($id);
        $statuses = [
            'available' => 'Доступен',
            'unavailable' => 'Недоступен'
        ];
        if ($product) {
            return view('show_product', ['product' => $product,'statuses'=>$statuses]);
        } else {
            return redirect('/')->with('error', 'Продукт не найден.');
        }
    }

    public function update(Request $request, $id)
    {
        $product = Product::find($id);
    
        // Обновляем продукт с помощью данных из $request
        $product->name = $request->name;
        $product->status = $request->status;
    
        // Обновляем атрибуты продукта
        foreach ($request->attributes as $attributeData) {
            $attribute = \App\Models\Attribute::find($attributeData['id']);
            if ($attribute) {
                $attribute->name = $attributeData['name'];
                $attribute->value = $attributeData['value'];
                $attribute->save();
            }
        }
    
        // Удаляем атрибуты, помеченные для удаления
        foreach ($request->toDelete as $attributeId) {
            $attribute = \App\Models\Attribute::find($attributeId);
            if ($attribute) {
                $attribute->delete();
            }
        }
    
        $product->save();
    
        return redirect('/product/' . $id);
    }
    


public function deleteAttribute(Request $request, $id)
{
    $attribute = \App\Models\Attribute::find($id);

    // Проверяем, существует ли атрибут
    if (!$attribute) {
        return response()->json(['error' => 'Атрибут не найден.'], 404);
    }

    // Удаляем атрибут
    $attribute->delete();

    // Возвращаем ответ в формате JSON с сообщением об успехе
    return response()->json(['success' => 'Атрибут успешно удален.']);
}

} ``` 
вот мои роуты 
``` <?php

use App\Http\Controllers\ProfileController;
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\ProductAddController;
use App\Http\Controllers\ProductsViewController;
use App\Http\Controllers\ProductUpdateController;
use App\Http\Controllers\ProductAttributeController;
use App\Http\Controllers\ProductController;

Route::get('/product',[ProductController::class, 'indexOfProducts'])->name('product');
Route::get('/', [ProductController::class, 'indexOfProducts']);
Route::post('/add', [ProductAddController::class, 'addProduct'])->middleware('auth')->name('add');
Route::get('/add', [ProductAddController::class, 'showForm']);
Route::get('/product/{id}', [ProductController::class, 'showProduct'])->name('show_product');
Route::get('/product/{id}/edit', [ProductController::class, 'isedit']);
Route::put('/product/{id}/edit', [ProductController::class, 'update']);
Route::delete('/product/attribute/{id}', [ProductController::class, "deleteAttribute"]);

Route::get('/add', function () {
    return view('add_product');
})->middleware(['auth', 'verified'])->name('dashboard');

Route::middleware('auth')->group(function () {
    Route::get('/profile', [ProfileController::class, 'edit'])->name('profile.edit');
    Route::patch('/profile', [ProfileController::class, 'update'])->name('profile.update');
    Route::delete('/profile', [ProfileController::class, 'destroy'])->name('profile.destroy');
});

require __DIR__.'/auth.php'; ```
 первый вариант JS кода, через ajax  ``` $(document).ready(function() {
    var attributeIndex = 0;

    $(document).on('click', '#add-attribute', function() {
        $('#attributes').append(`
            <div class="attribute">
                <div class="fields">
                    <label for="attributes[${attributeIndex}][name]">Имя атрибута:</label><br>
                    <input type="text" id="attributes[${attributeIndex}][name]" name="attributes[${attributeIndex}][name]"><br>
                    <label for="attributes[${attributeIndex}][value]">Значение атрибута:</label><br>
                    <input type="text" id="attributes[${attributeIndex}][value]" name="attributes[${attributeIndex}][value]"><br>
                </div>
                <button type="button" class="delete-attribute">X</button>
            </div>
        `);
        attributeIndex++;
    });

    $(document).on('click', '.delete-attribute', function() {
        $(this).parent().addClass('todelete');
    });

    $('#save-changes-button').click(function(event) {
        console.log('Button clicked'); 

        var button = $(this);  // Сохраняем ссылку на кнопку

        if ($('.todelete').length > 0) {
            console.log('Найдены атрибуты, помеченные для удаления');
            $('.todelete').each(function() {
                var attributeId = $(this).data('id');
                console.log('1 st: ' + attributeId)
            });
        } else {
            // Если нет атрибутов, помеченных для удаления, просто отправляем форму
            console.log('Нет атрибутов, помеченных для удаления. Отправка формы...');
            button.closest('form').submit();
        }
    });
});``` 

и второй, попроще 

``` $(document).ready(function() { var attributeIndex = 0;
    $(document).on('click', '#add-attribute', function() {
        $('#attributes').append(`
            <div class="attribute">
                <div class="fields">
                    <label for="attributes[${attributeIndex}][name]">Имя атрибута:</label><br>
                    <input type="text" id="attributes[${attributeIndex}][name]" name="attributes[${attributeIndex}][name]"><br>
                    <label for="attributes[${attributeIndex}][value]">Значение атрибута:</label><br>
                    <input type="text" id="attributes[${attributeIndex}][value]" name="attributes[${attributeIndex}][value]"><br>
                </div>
                <button type="button" class="delete-attribute">X</button>
            </div>
        `);
        attributeIndex++;
    });
    
    $(document).on('click', '.delete-attribute', function() {
        $(this).parent().addClass('todelete');
    });
    
    $('#save-changes-button').click(function() {
        console.log('Button clicked'); 
    
        var button = $(this);  // Сохраняем ссылку на кнопку
    
        if ($('.todelete').length > 0) {
            console.log('Найдены атрибуты, помеченные для удаления');
            $('.todelete').each(function() {
                var attributeId = $(this).data('id');
                console.log('1 st: ' + attributeId)
            });
        } else {
            // Если нет атрибутов, помеченных для удаления, просто отправляем форму
            console.log('Нет атрибутов, помеченных для удаления. Отправка формы...');
            button.closest('form').submit();
        }
    });
    
    }); ``` 
так, ну и блейд страницы 
``` <x-app-layout>
<header>
    <link href="{{ asset('css/editPage.css') }}" rel="stylesheet">
    <meta name="csrf-token" content="{{ csrf_token() }}">
    <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
</header>
    <x-slot name="header">
        <h2 class="font-semibold text-xl text-gray-800 dark:text-gray-200 leading-tight">
            {{ __('Edit Product') }}
        </h2>
    </x-slot>
    <body>
    <div class="py-12">
        <div class="max-w-7xl mx-auto sm:px-6 lg:px-8">
            <div class="bg-white dark:bg-gray-800 overflow-hidden shadow-sm sm:rounded-lg">
                <div class="p-6 text-gray-900 dark:text-gray-100">
                    <div>
                        <h2>Редактировать продукт</h2>
                        <form method="POST" action="/product/{{ $product->id }}/edit">

                            @csrf
                            @method('PUT')
                            <label for="article">Артикул:</label><br>
                            <input type="text" id="article" name="article" value="{{ $product->article }}" disabled><br>

                            <label for="name">Название:</label><br>
                            <input type="text" id="name" name="name" value="{{ $product->name }}" required minlength="10"><br>

                            <label for="status">Статус:</label><br>
                            <select id="status" name="status" required>
                                <option value="available" {{ $product->status == 'available' ? 'selected' : '' }}>Доступен</option>
                                <option value="unavailable" {{ $product->status == 'unavailable' ? 'selected' : '' }}>Недоступен</option>
                            </select><br>

                            @foreach ($product->attributes as $index => $attribute)
                                <div class="attribute" id="attribute-{{ $attribute->id }}" data-id="{{ $attribute->id }}">
                                    <div class="fields">
                                        <!-- Добавьте это скрытое поле -->
                                        <input type="hidden" name="attribute_ids[]" value="{{ $attribute->id }}">

                                        <label for="attributes[{{ $index }}][name]">Имя атрибута:</label><br>
                                        <input type="text" id="attributes[{{ $index }}][name]" name="attributes[{{ $index }}][name]" value="{{ $attribute->name }}"><br>
                                        <label for="attributes[{{ $index }}][value]">Значение атрибута:</label><br>
                                        <input type="text" id="attributes[{{ $index }}][value]" name="attributes[{{ $index }}][value]" value="{{ $attribute->value }}"><br>
                                    </div>
                                    @if (auth()->id() == $product->user_id && auth()->user()->role == 'user')
                                        <button type="button" class="delete-attribute" data-id="{{ $attribute->id }}">✖</button>
                                        <button type="button" class="cancel-delete" data-id="{{ $attribute->id }}" style="display: none;">Отменить удаление</button>
                                        <form method="POST" action="/product/attribute/{{ $attribute->id }}" id="delete-form-{{ $attribute->id }}" style="display: none;">
                                            @csrf
                                            @method('DELETE')
                                        </form>
                                    @endif
                                </div>
                            @endforeach

                            <div id="attributes" class="attribute-container">
                                <!-- Здесь будут добавляться поля для атрибутов -->
                            </div>
                            @if (auth()->id() == $product->user_id && auth()->user()->role == 'user')
                            <button type="button" id="add-attribute">Добавить атрибут</button><br>
                            @endif
                            <input id="save-changes-button" style="cursor:pointer" type="submit" value="Сохранить изменения">
                        </form>
                    </div>

                </div>
            </div>
        </div>
    </div>
    <script src="{{ asset('scripts/JSeditPage.js') }}"></script>
</body>


</x-app-layout>```

, если надо скинуть это в зипак- скину, надо залить на гит - залью, только прощу помочь, мне нужен либо работающий метод редактирования, либо понять как исправить мой код, сейчас просто удаление атрибутов это отдельная функция, т.к в таблице атрибуты отдельно, и передаются через массив, соответственно я и поставил их отдельно. Если что-то не достает, пишите, скину быстро как смогу


Ответы (0 шт):