Вы можете получать агрегированные данные ежемесячно без цикла.
$MonthlyReceive = DB::table('order_items')
->select(DB::raw('sum(price*quantity) as amnt'))
->whereRaw('date(created_at) between "'.$year.'-01-01" and "'.$year.'-12-31"')
->where('quantity','<','0')
->groupBy(DB::raw("date_format(created_at, '%Y-%M')"));
Просто используйте group by
с функцией агрегирования.