#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"
}]
}]
}