Shlop
@Shlop
Full Stack Developer (PHP/Laravel/JavaScript)

Как сделать смену позиции категории в общем списке?

Есть у меня такая вот миграция:
Schema::create('categories', function (Blueprint $table) {
            $table->mediumIncrements('id');
            $table->string('name')->index(); // Заголовок
            $table->text('text')->nullable(); // Описание
            $table->string('title',150); // title на странице категории
            $table->string('keywords',212)->nullable(); // keywords на странице категории
            $table->text('description'); // description на странице категории
            $table->string('image',80)->nullable(); // путь до картинки категории
            $table->string('folder',23)->nullable(); // название папки где хранятся картинки контента
            $table->boolean('is_extended')->default(0); // расширенная категория или нет
            $table->boolean('hide')->default(0); // опубликован или не опубликован
            $table->string('alias',160); // URL категории
            $table->unsignedTinyInteger('index')->default(0); // Позиция категории
            $table->unsignedMediumInteger('parent_id')->nullable();
            $table->foreign('parent_id')->references('id')->on('categories')->onDelete('set null');
            $table->timestamps();
        });

Нужно реализовать возможность перетаскивания категорий, допустим та категорию которая в конец, её можно перетащить в начало, и она станет первой, это я реализовал с помощью поля в БД index и при выводе происходит сортировка по этому полю. Но проблема в том, что по умолчанию у всех категорий index 0, и сначала идут все категории с index 0 а потом уже всё остальное, как вот решить данную проблему ? Просто что ли при создании каждой категории инкрементировать этот index ? Но мне кажется вариант не очень какой-то.
  • Вопрос задан
  • 70 просмотров
Решения вопроса 1
neuotq
@neuotq
Прокрастинация
Нет, автоинкремент точно нет. Но если бизнес логика требует, можно сделать +1 к максимальному значению при создании нового, как пример.
А так, для сортировки по умолчанию у тебя уже есть id, так что по нему и будет сортировка идти, при прочих равных (ну если у всех 0).
Кстати, совутю поставить пакет spatie/eloquent-sortable, они сделали реализацию большей части нужной логики для сортировок, поэтому тебе только в нужных местах прописать вызов методов, поведение по умолчанию(можно использовать query scope), ну и запрос с фронта. И всё волшебно будет работать. Тебе схему и БД менять не нужно, только установить пакет и сделать соответвующие правки в код.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы