Я использую шаблон EAV в моей БД.Это означает, что у меня есть продукт, который принадлежит множеству спецификаций, а спецификации относятся ко многим значениям спецификаций.
Мне нужно отсортировать товар по условию.Например, у моей продукции есть группа спецификаций.Такой продукт, как iPhone 6, имеет группу «телефон», а группа «телефон» имеет такие характеристики, как дисплей, память, память.Все эти спецификации имеют столбец положения, такой как RAM (POS 1), Storage (POS 2), Display (Pos 3).Внутри каждой спецификации множество значений и каждое значение также имеют столбец положения.
Поэтому, когда я выбираю все свои продукты, каждый продукт имеет отношения с группой.Я использую красноречивые отношения hasManyThrough, чтобы получить все спецификации, которые связаны с группой.
Вот так выглядит моя коллекция: https://pastebin.com/8TAM62wt
В соответствии с примером мне нужно отсортировать свою позицию по значению спецификации, но значения должны быть получены по таблице спецификаций столбца позиции.Мой английский не очень хороший, поэтому я приведу еще один пример.
Здесь, в этом коде https://pastebin.com/QnC7Drq3
Мне нужно отсортировать все продукты по значениям спецификации, где таблица спецификаций имеет заголовок Display, потому чтоего позиция равна 1. Поэтому я отсортировал свой продукт по дисплею, а затем перешел к следующей спецификации с более высоким значением позиции.В соответствии с этим примером это будет Storage, причина позиции равна 3.
Я знаю единственный способ, как сортировать, и это работает, когда relatedSpecifications является массивом (коллекцией), но не работает, когда это массивan of array.
$products = ModelProvidersProducts::has('relatedProduct')->where('quantity', '!=', 0)->get();
$products->sortBy(function($q){
return $q->relatedProduct->relatedSpecifications->position;
});
Я надеюсь, что моего английского достаточно, чтобы описать мою проблему.Надеюсь, что некоторые из вас, ребята, могут помочь мне или, по крайней мере, показать правильный путь.
Кроме того, я понимаю, что сортировка коллекции выполняется очень медленно, тогда orderBy, может быть, будет лучше, если вы приведете пример с помощью orderBy, а не sortBy?