Group the dates
$grouped = collect($array)->groupBy(function ($item, $key) {
return Carbon::parse($item)->toDateString();
});
//now you can foreach nested
foreach ($grouped as $date => $items) {
//create the date record here using $date
$model = Date::create(['date' = > $date]);
$inserts = [];
foreach ($items as $timestamp) {
//insert timestamps with date_id = $id from above
$inserts[] = ['time' => Carbon::parse($timestamp)->toTimeString(), 'date_id' => $model->id];
}
Time::insert($inserts);
}
The second loop is a single insert, to avoid alot of database queries :)