Группировка Laravel По дате

#laravel #eloquent #collect

Вопрос:

я прочитал несколько вопросов, уже размещенных здесь.Но не нашел никакого решения для моего требования. Запомните этот ответ, в котором отображается информация о регистрации в магазине, посещенном пользователем.

Группировка Сбор

 $this->collection->groupBy(function ($date) {
                return Carbon::parse($date->createdAt)->toDateString();
  }
 

Будет возвращена группировка данных по дате..

ответ

 {
   "data":{
      "2021-08-31":[
         {
            "avatar":"avatars/IIa1gvCvww5K4geXJHUYTTZm2IKFoK113octfPB1.jpg",
            "name":"General Shop 15"
         },
         {
            "avatar":"avatars/IIa1gvCvww5K4geXJHUYTTZm2IKFoK113octfPB1.jpg",
            "name":"General Shop 15"
         }
      ],
      "2021-08-29":[
         {
            "avatar":"avatars/IIa1gvCvww5K4geXJHUYTTZm2IKFoK113octfPB1.jpg",
            "name":"General Shop 15"
         }
      ],
      "2021-08-20":[
         {
            "avatar":"avatars/GSDrGe8RLGXykvvsEVlWtnqRGbAOoJUuSh7WZhFc.jpg",
            "name":"XYZ Store"
         },
         {
            "avatar":"avatars/GSDrGe8RLGXykvvsEVlWtnqRGbAOoJUuSh7WZhFc.jpg",
            "name":"XYZ Store"
         },
         {
            "avatar":"avatars/GSDrGe8RLGXykvvsEVlWtnqRGbAOoJUuSh7WZhFc.jpg",
            "name":"XYZ Store"
         }
      ]
   }
}
 

Но я хочу, чтобы ответ выглядел как взорванный..
затем дата группировки будет отображаться как..

 {
   "data":[
      {
         "date":"2021-08-31",
         "data":[
            {
               "avatar":"avatars/IIa1gvCvww5K4geXJHUYTTZm2IKFoK113octfPB1.jpg",
               "name":"General Shop 15"
            },
            {
               "avatar":"avatars/IIa1gvCvww5K4geXJHUYTTZm2IKFoK113octfPB1.jpg",
               "name":"General Shop 15"
            }
         ]
      },
      {
         "date":"2021-08-29",
         "data":[
            {
               "avatar":"avatars/IIa1gvCvww5K4geXJHUYTTZm2IKFoK113octfPB1.jpg",
               "name":"General Shop 15"
            },
            {
               "avatar":"avatars/IIa1gvCvww5K4geXJHUYTTZm2IKFoK113octfPB1.jpg",
               "name":"General Shop 15"
            }
         ]
      }
   ]
}
 

Ответ №1:

Вы уже получаете необходимые вам данные. просто для того, чтобы зафиксировать данные в требуемом формате, зациклите полученную вами коллекцию и поместите ее в формат, каким вы хотите ее видеть.

Ответ №2:

Вы не можете изменить этот ответ на уровне Mysql при получении ваших данных. Что вы можете сделать после того, как ваша коллекция проанализирует ее и соответствующим образом изменит. Что-то вроде этого сработает:

 $counter = 0;
foreach($myCollection->data as $key=>$value){
    $formattedResponse['data'][$counter]['date'] = $key;
    $formattedResponse['data'][$counter]['data'] = $value;
    $counter   ;
}
 

Вывод, основанный на вашем примере ввода json, выглядит следующим образом:

 {
    "data": [{
        "date": "2021-08-31",
        "data": [{
            "avatar": "avatars/IIa1gvCvww5K4geXJHUYTTZm2IKFoK113octfPB1.jpg",
            "name": "General Shop 15"
        }, {
            "avatar": "avatars/IIa1gvCvww5K4geXJHUYTTZm2IKFoK113octfPB1.jpg",
            "name": "General Shop 15"
        }]
    }, {
        "date": "2021-08-29",
        "data": [{
            "avatar": "avatars/IIa1gvCvww5K4geXJHUYTTZm2IKFoK113octfPB1.jpg",
            "name": "General Shop 15"
        }]
    }, {
        "date": "2021-08-20",
        "data": [{
            "avatar": "avatars/GSDrGe8RLGXykvvsEVlWtnqRGbAOoJUuSh7WZhFc.jpg",
            "name": "XYZ Store"
        }, {
            "avatar": "avatars/GSDrGe8RLGXykvvsEVlWtnqRGbAOoJUuSh7WZhFc.jpg",
            "name": "XYZ Store"
        }, {
            "avatar": "avatars/GSDrGe8RLGXykvvsEVlWtnqRGbAOoJUuSh7WZhFc.jpg",
            "name": "XYZ Store"
        }]
    }]
}