Добрый вечер. Стоит задача сортировки значений, при выборке из базы. В целом, если я реализую связь "один к одному", проблем нет, все работает. Но у меня в базе применяеться шаблон EAV. Каждый товар, пренадлежит к группе характеристик. У каждой характеристики есть поле position, по которому я выставить приоритет сортировки. После этого, у каждой характеристики есть связь с значением, привязанным к товару. И у этих значени, тоже есть поле position.
Допустим я получил данные из базы и делаю сортировку
$products->sortBy(function($q){
return $q->relatedProduct->relatedSpecsGroup->position;
})
Это сработает если связь "relatedSpecsGroup" будет один к одному, но здесь реализуется связь "ко многим через", следовательно этот метод не сработает. В документации я ничего по этому поводу не нашел.
Выходит, что "relatedSpecsGroup" содержит в себе характеристики, привязанные к группе товара. А у каждой характеристики, есть значение, которое в свою очередь пренадлежит и товару и характеристике.
relatedSpecsGroup для каждого товара, выглядит вот так:
[
['id', 'title','position','relatedValue'=>['id','value','position']],
['id', 'title','position','relatedValue'=>['id','value','position']],
['id', 'title','position','relatedValue'=>['id','value','position']],
['id', 'title','position','relatedValue'=>['id','value','position']],
]
Мне нужно отсортировать по значения relatedValue, но прежде, отсортировать relatedSpecsGroup по position, тем самым выставляеться порядок сортировки для характеристик, а только потом для значений характеристик.
Как подобного рода сортировки делаються? Можно ли такую сортировку, сделать на уровне запроса, поскольку - это существенно быстрее, нежели метод sortBy на коллекции. Если нельзя, то как это реализуеться с помощью sortBy?
Спасибо!