Я бы подошел к нему с другой стороны. Выберите объекты и поместите их в сегменты даты.
Laravel может помочь вам из коробки, сгруппировав их по атрибутам. Вам нужно только сопоставить его с желаемой структурой.
$products = DB::table("products")
->where('id_advisor',$advisor->id)->where('deleted_at', NULL)
->where('created_at',">=", $start)->where('created_at',"<=", $end)
->get()
->groupBy('created_at');
** Исходные фрагменты примера кода ** Ниже приведен некоторый (псевдокод) в качестве примера обратного подхода.
$products = DB::table("products")
->where('id_advisor',$advisor->id)->where('deleted_at', NULL)
->where('created_at',">=", $start)->where('created_at',"<=", $end)
->get();
$buckets = $products->map(
function($product) {
return $product->created_at;
}
)->unique();
$result = $buckets->map(function ($bucket) use ($products) {
return [
'date' => $bucket,
'products' => $products->filter(
function($product) use ($bucket) {
return $product->created_at === $bucket;
}
)
];
});
dd($results);
Результат дампа:
Illuminate\Support\Collection {#1050
#items: array:3 [
0 => array:2 [
"date" => "2020-07-03"
"products" => Illuminate\Support\Collection {#1048
#items: array:1 [
0 => array:2 [
"date" => "2020-07-03"
"id" => 1
]
]
}
]
1 => array:2 [
"date" => "2020-07-04"
"products" => Illuminate\Support\Collection {#1047
#items: array:2 [
1 => array:2 [
"date" => "2020-07-04"
"id" => 2
]
2 => array:2 [
"date" => "2020-07-04"
"id" => 3
]
]
}
]
3 => array:2 [
"date" => "2020-07-05"
"products" => Illuminate\Support\Collection {#1045
#items: array:1 [
3 => array:2 [
"date" => "2020-07-05"
"id" => 4
]
]
}
]
]
}