Vladddosss
@Vladddosss

Как получить самые продаваемые товары Laravel?

Добрый день.

$bestProductIds = Order::get()->map->products->flatten()->map->pivot->mapTogroups( function ($pivot) {
            return [$pivot->product_id => $pivot->count];
        })->map->sum()->sortDesc()->take(3)->keys()->toArray();

        $bestProducts = Product::whereIn('id', $bestProductIds)->get();


В $bestProductIds ложатся айди товаров от большего к меньшему, то есть первый тот айдишник где продаж больше.
Выводит 4, 5, 1

Но при выборке $bestProducts через метод whereIn они выводятся не в том же порядке, а в хронологиском, 1, 4, 5

Как их получить в том порядке, который лежит в массиве $bestProductIds?
  • Вопрос задан
  • 258 просмотров
Решения вопроса 1
Пригласить эксперта
Ответы на вопрос 1
Lyrium
@Lyrium
Web developer
Добрый день, добавьте сортировку в нужном для вас порядке.

$bestProductIds = Order::get()->map->products->flatten()->map->pivot->mapTogroups(function ($pivot) {
            return [$pivot->product_id => $pivot->count];
        })->map->sum()->sortDesc()->take(3)->keys()->toArray();
        
        $bestProductIdsStr = implode(',', $bestProductIds);
        $bestProducts = Product::whereIn('id', $bestProductIds)
            ->orderByRaw(DB::raw("FIELD(id, $bestProductIdsStr)"))
            ->get();
Ответ написан
Ваш ответ на вопрос

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

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