Сортировка на уровне запроса либо sortBy на коллекции laravel?

Доброй ночи! У меня в базе, данные о продуктах храняться с применением EAV - это хоть и косвенно, но касаеться проблемы.

Суть в том, что у продукта, есть разные характеристики, а у характеристик соответственно значения. Мне необходимо отсортировать выборку по определенному полю в таблице с значением характеристики, но при этом опираясь на определенно поле в таблице с характеристиками. Количества самих харктеристик я не знаю, пользователь может создать бесконечное их число.

Все связи у меня реализованы штатными возможностями eloquent orm. Массив с данными выглядит вот так
$products = [
            [
                'id' => 1,
                'title' => 'Product N',
                'specifications' => [
                    [
                        'id' => 2,
                        'title' => 'Display',
                        'position' => 1,
                        'value' => [
                            'id' => 22,
                            'value' => 'OLED',
                            'position' => 1
                        ]
                    ],
                    [
                        'id' => 3,
                        'title' => 'Storage',
                        'position' => 3,
                        'value' => [
                            'id' => 11,
                            'value' => '16GB',
                            'position' => 1
                        ]
                    ],
                ]
            ],
            [
                'id' => 2,
                'title' => 'Product C',
                'specifications' => [
                    [
                        'id' => 2,
                        'title' => 'Display',
                        'position' => 1,
                        'value' => [
                            'id' => 22,
                            'value' => 'IPS',
                            'position' => 3
                        ]
                    ],
                    [
                        'id' => 3,
                        'title' => 'Storage',
                        'position' => 3,
                        'value' => [
                            'id' => 12,
                            'value' => '32GB',
                            'position' => 2
                        ]
                    ],
                ]
               ]
        ];


Отсортировать нужно следующим образом, идем в specifications, берем элемент с наименьшим значением position, идем в value. Сортируем по position. Берем следующий элемент массива specifications и по кругу. До тех пор, пока не отсортируем все значения.
Причем у продуктов могут быть разные группы характеристик, соответственно, нужно универсальное решение. Подскажите пожалуйста, как такого рода сортировки вообще делать. Можно ли, сделать все это на уровне запроса?
  • Вопрос задан
  • 357 просмотров
Пригласить эксперта
Ответы на вопрос 1
Sanasol
@Sanasol Куратор тега Laravel
нельзя просто так взять и загуглить ошибку
Джоинитесь во все характеристики по очереди и сортируете как обычно через orderBy
Коллекцию бессмысленно сортировать, на выходе будет отсортированнные на каждой странице отдельной результаты ведь.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы