Я использовал laravel groupBy, но я пытаюсь отсортировать результаты по тому, где много сгруппированных элементов - PullRequest
0 голосов
/ 25 мая 2020

Я пытаюсь отсортировать, где на первом месте сгруппированный product_id, у которого много заказов: Вот мои коды:

$orderProducts = OrderProduct::where("seller_id", auth()->user()->id)->latest()->get()
            ->groupBy(function ($val){
                return $val->product_id;
});

Результат похож на:

 ` {
     "1": [
           {
            "id": 8,
            "order_id": "5",
            "product_id": "1",
         }],
     "2": [
           {
            "id": 9,
            "order_id": "5",
            "product_id": "2",
         },
        {
            "id": 10,
            "order_id": "5",
            "product_id": "2",
         }
]}
 `

And i want it sorted like: `
      { 
      "2": [
           {
            "id": 9,
            "order_id": "5",
            "product_id": "2",
         },
        {
            "id": 10,
            "order_id": "5",
            "product_id": "2",
         }
    ],
     "1": [
           {
            "id": 8,
            "order_id": "5",
            "product_id": "1",
         }],
    }
`

где product_id 2 с многие заказы идут в первую очередь, а другие заказываются в соответствии с имеющимися заказами. Спасибо!

1 Ответ

0 голосов
/ 25 мая 2020

Поскольку у вас уже есть коллекция, вы можете просто вызвать метод sortByDesc() коллекции. Ссылка: https://laravel.com/docs/7.x/collections#method -sortbydes c

$orderProducts = OrderProduct::where("seller_id", auth()->user()->id)
        ->latest()
        ->get()
        ->groupBy(function ($val){
            return $val->product_id;
        })->sortByDesc(function($object) {
            return $object->count();
        });

Как видите, я возвращаю количество элементов массива объектов с помощью метода Laravel count () .

...