Задать вопрос
alexjet73
@alexjet73

Есть ли в Laravel возможность менять порядок моделей?

Есть ли в Laravel возможность менять порядок моделей для приведения к выставленному порядку на фронтенд?
В моем случае это драгбл блоки с заметками, которые пользователь может таскать меняя их порядок. И требуется возможность при каждой смене порядка сохранять этот порядок.

p.s. используется Laravel 8
  • Вопрос задан
  • 160 просмотров
Подписаться 1 Простой 4 комментария
Пригласить эксперта
Ответы на вопрос 3
dima9595
@dima9595
Junior PHP
"Порядка моделей" - неправильное понятие. Такого нет.

У вас эти элементы меняются посредством JS и хранится в каком-нибудь объекте. Так в чём проблема сохранить этот объект в какое-нибудь поле таблицы?
Ответ написан
zorca
@zorca
Гуглить "Laravel Sortable"
Ответ написан
Комментировать
@Kostik_1993
Web Developer
Если вас беспокоит количество запросов можете что-то подобное сделать, но только более элегантно
if($request->photo !== null){

                /**
                 * Городим конструкцию, которая позволит нам избежать n+1 запросов при прикреплении фотографий к записи
                 * Стандартная реализация связей нам не подходит потому что у нас помимо указания ID поста
                 * необходимо добавить порядкове номера для сортировки фотографий
                 * Аналогичная функция используется и для перетаскивая
                 */
                $table = with(new Photo)->getTable();
                $imageable_type = Advert::class;
                $imageable_id = $advert->id;
                $cases = [];
                $ids = [];
                $params = [];

                foreach ($request->photo as $value => $id) {
                    $id = (int) $id;
                    $cases[] = "WHEN {$id} then ?";
                    $params[] = $value;
                    $ids[] = $id;
                }

                $ids = implode(',', $ids);
                $cases = implode(' ', $cases);
                $params[] = $imageable_type;
                $params[] = $imageable_id;

                $this->db->update("UPDATE `{$table}` SET `position` = CASE `id` {$cases} END, `imageable_type` = ?, `imageable_id` = ? WHERE `id` in ({$ids})", $params);
            }
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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