Нет, в Eloquent или Carbon нет function that already does it
, afaik.
Я бы предложил просмотреть цикл Eloquent Collection.
Вот подсказка для вас:
$from = Carbon::now()->subMonth(4);
$to = Carbon::now();
$invoices = invoice::where('instructor_id', '=', $id)->whereBetween('created_at', [$from, $to])->get();
// ...
$invoicesLastWeek = $invoices->whereBetween('created_at', [
Carbon::now()->subWeeks(1)->startOfWeek(),
Carbon::now()->subWeeks(1)->endOfWeek()
]);
// ...
$invoicesTwoMonthsAgo = $invoices->whereBetween('created_at', [
Carbon::now()->subMonths(2)->startOfMonth()),
Carbon::now()->subMonths(2)->endOfMonth()
]);
// ...
Я бы l oop и увеличил параметры для ->subWeeks($i)->
и ->subMonths($i)->
, и заполнил необходимые переменные.
Я бы сначала начал устанавливать каждый week
переменную, так что я может вытолкнуть из Коллекции все счета в этом диапазоне (для производительности). Затем для каждого month
vars я бы добавил weekN + weekN+1 + weekN+2 + weekN+3
vars (и также вытащил их из Коллекции, чтобы я мог на oop быстрее в Коллекции, которая уменьшается с каждым разом).