Сортировка на уровне запроса либо 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 и по кругу. До тех пор, пока не отсортируем все значения.
Причем у продуктов могут быть разные группы характеристик, соответственно, нужно универсальное решение. Подскажите пожалуйста, как такого рода сортировки вообще делать. Можно ли, сделать все это на уровне запроса?
  • Вопрос задан
  • 388 просмотров
Пригласить эксперта
Ответы на вопрос 1
Sanasol
@Sanasol Куратор тега Laravel
нельзя просто так взять и загуглить ошибку
Джоинитесь во все характеристики по очереди и сортируете как обычно через orderBy
Коллекцию бессмысленно сортировать, на выходе будет отсортированнные на каждой странице отдельной результаты ведь.
Ответ написан
Ваш ответ на вопрос

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

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