Birçok Laravel uygulamasında, dashboard istatistikleri genellikle toplam kullanıcı sayısı, toplam sipariş sayısı, gelir, ortalama sipariş değeri, grafik verileri, yüzdelik değişim gibi temel göstergelerle başlar. Başlangıçta bu mantık iyi görünebilir çünkü her istatistik “sadece bir sorgu” gibi görünür. Ancak uygulama büyüdükçe, aynı mantık kontrolcü, hizmetler, widget’lar, raporlar ve API uç noktalarında görünmeye başlar.
Bu, kod tabanınıza yayılmaya başlayacak rahatsız edici ancak küçük bir sorun. Neden? Çünkü dashboard veri filtrelerine, grafik verilerine, yüzde değişimlerine, önbelleğe alınmış sayılara ve benzeri verilere ihtiyaç duyulacaktır ki bu verilere farklı yerlerde yeniden ulaşmak zorunda kalabilirsiniz.
Bu tür bir durumu çözmek için Laravel Statistician paketini geliştirdim.
Laravel Statistician, Eloquent modellerden, sorgu oluşturuculardan, model sınıflarından veya basit tablo adlarından temiz uygulama istatistikleri oluşturmak için bir Laravel paketidir. Hedef basittir: Dashboard ve raporlama mantığını tekrar kullanılabilir hale getirmek, sorgu mantığını her yere kopyalamaktan kaçınmaktır.
Repository:
https://github.com/omaressaouaf/laravel-statistician
Problem
Problem
Birçok Laravel uygulamasında, dashboard istatistikleri aşağıdaki gibi başlar:
$totalUsers = User::count();
$totalOrders = Order::count();
$totalRevenue = Order::sum('total');
$averageOrderValue = Order::avg('total');
Başlangıçta bu tamamen iş görebilir. Ancak sorun, dashboard tarih filtrelerine, grafik verilerine, yüzdelik değişimlere, önbelleğe alınmış verilere ve benzeri verilere ihtiyaç duyduğunda başlar. O noktada, sorun artık sorguların karmaşık olmaması değil, bu sorguların çoğaltılabilir olmasıdır.
Bir kontrolcü mantığı vardır. Bir admin widget’ında başka bir kısım vardır. Rapor dışarı aktarmada bir başka versiyon vardır. API uç noktasında başka bir versiyon vardır. Zamanla, bu küçük kopyalanmış sorgular, kod tabanında tutarsızlıklara yol açar.
Laravel Statistician Neler Yapıyor?
Laravel Statistician Neler Yapıyor?
Laravel Statistician, uygulama istatistiklerini tanımlamak ve oluşturmak için daha temiz bir yol sunuyor. Paket, genel dashboard ihtiyaçlarını destekler: toplu istatistikler, tarih aralığı filtreleme, grafikler için tarih gruplu istatistikler, dönemler arasındaki yüzdelik değişiklikler, trend istatistikleri, çoklu istatistikleri bir çağrıda alma, önbellekleme ve özel anahtarlar gibi pek çok özellik sunmaktadır.
Paket, tam kapsamlı bir analiz platformu veya BI aracı olmayı hedeflemiyor. Daha çok, çoğu Laravel uygulamasının ihtiyaç duyduğu istatistikler için küçük bir pakettir; dashboard’lar, yönetim panelleri, raporlar ve dahili araçlar için idealdir.
Kurulum
Kurulum
Paketi Composer ile kurabilirsiniz:
composer require omaressaouaf/laravel-statistician
Temel Toplu İstatistik
Temel Toplu İstatistik
İşte kullanıcıları saymak için temel bir örnek:
use App\Models\User;
use Omaressaouaf\LaravelStatistician\Enums\Aggregate;
use Omaressaouaf\LaravelStatistician\Sources\AggregateSource;
use Omaressaouaf\LaravelStatistician\Statisticians\AggregateStatistician;
$stats = AggregateStatistician::fromSources(
new AggregateSource(User::class, Aggregate::COUNT)
)->get();
echo $stats['users_count'];
Sorguyu, doğrudan bir kontrolcü veya dashboard widget’ı içerisinde yazmak yerine, istatistiği yapılandırılmış bir kaynak haline getirir. Bu, yeniden kullanılmasını, genişletilmesini ve diğer istatistiklerle birleştirilmesini kolaylaştırır.
Özel Anahtarlar
Özel Anahtarlar
Paket, kaynak ve toplula dayalı olarak bir anahtar üretir. Ancak kendi anahtarınızı tanımlamanız da mümkündür:
$stats = AggregateStatistician::fromSources(
(new AggregateSource(User::class, Aggregate::COUNT))->keyBy('total_users')
)->get();
echo $stats['total_users'];
Bu, dashboard’nuzun yanıtının temiz ve öngörülebilir isimlere sahip olmasını destekler.
Tarih Aralığı Filtreleme
Tarih Aralığı Filtreleme
Çoğu dashboard istatistiği global değildir. Genelde, bugünün, bu haftanın, bu ayın, bu yılın veya özel bir tarih aralığının sayılarının bulunmasını istersiniz.
Laravel Statistician, bir başlangıç ve bitiş tarihi uygulamanıza olanak tanır:
$stats = AggregateStatistician::fromSources(
new AggregateSource(User::class, Aggregate::COUNT)
)
->start('2025-01-01')
->end('2025-12-31')
->get();
Bu, tarih filtrelemenin tutarlı olmasını sağlar.
Bir Çağrıda Birden Fazla İstatistik
Bir Çağrıda Birden Fazla İstatistik
Yaygın bir dashboard modeli, kullanıcılar, siparişler ve gelir gibi birden fazla sayının birlikte döndürülmesidir.
use App\Models\User;
use App\Models\Order;
use Omaressaouaf\LaravelStatistician\Enums\Aggregate;
use Omaressaouaf\LaravelStatistician\Sources\AggregateSource;
use Omaressaouaf\LaravelStatistician\Statisticians\AggregateStatistician;
$stats = AggregateStatistician::fromSources(
(new AggregateSource(User::class, Aggregate::COUNT))->keyBy('users'),
(new AggregateSource(Order::class, Aggregate::COUNT))->keyBy('orders'),
(new AggregateSource(Order::class, Aggregate::SUM, 'total'))->keyBy('revenue'),
)->get();
return $stats;
Bu, ilgili dashboard metriklerini gruplandırarak birden fazla yöntem veya hizmet arasında dağılma yerine bir arada tutar.
Toplam, Ortalama, Minimum ve Maksimum
Toplam, Ortalama, Minimum ve Maksimum
Yalnızca sayımlarla sınırlı değilsiniz. Örneğin, sipariş istatistiklerini şu şekilde hesaplayabilirsiniz:
use App\Models\Order;
use Omaressaouaf\LaravelStatistician\Enums\Aggregate;
use Omaressaouaf\LaravelStatistician\Sources\AggregateSource;
use Omaressaouaf\LaravelStatistician\Statisticians\AggregateStatistician;
$stats = AggregateStatistician::fromSources(
new AggregateSource(Order::class, Aggregate::SUM, 'total'),
new AggregateSource(Order::class, Aggregate::AVG, 'total'),
new AggregateSource(Order::class, Aggregate::MAX, 'total'),
)->get();
Bu, e-ticaret dashboard’ları, SaaS yönetim panelleri, finansal raporlar ve dahili iş araçları için faydalıdır.
Tarihlere Göre Gruplandırılan İstatistikler
Tarihlere Göre Gruplandırılan İstatistikler
Dashboard grafiklerinin genellikle, kullanıcıların günlük kaydı, siparişlerin günlük kaydı, aylık gelir gibi tarih bazlı veri gruplarına ihtiyacı vardır.
Laravel Statistician, tarih grubuna göre istatistikleri içerir:
use App\Models\User;
use Omaressaouaf\LaravelStatistician\Enums\Aggregate;
use Omaressaouaf\LaravelStatistician\Sources\DateGroupedAggregateSource;
use Omaressaouaf\LaravelStatistician\Statisticians\DateGroupedAggregateStatistician;
$stats = DateGroupedAggregateStatistician::fromSources(
new DateGroupedAggregateSource(User::class, Aggregate::COUNT)
)
->start('2025-01-01')
->end('2025-01-31')
->get();
Örnek sonuç:
[
'users_count_by_date' => [
'data' => [
['date_label' => '2025-01-01', 'aggregate' => 10],
['date_label' => '2025-01-02', 'aggregate' => 15],
],
'date_format' => 'Y-m-d',
],
]
Bu, grafik bileşenleri inşa ederken yararlıdır çünkü veri her seferinde el ile hazırlandığı yerine tutarlı bir formatta üretilebilir.
Yüzdelik Değişim
Yüzdelik Değişim
Dashboard’lar genellikle daha bağlamlı hale getirildiğinde daha yararlı hale gelir. “1.200 kullanıcı” önemlidir, ancak “1.200 kullanıcı, önceki döneme göre %18 artış” çok daha iyidir.
Laravel Statistician, dönemler arasındaki yüzdelik değişimi destekler:
use App\Models\User;
use Omaressaouaf\LaravelStatistician\Sources\PercentageChangeSource;
use Omaressaouaf\LaravelStatistician\Statisticians\PercentageChangeStatistician;
$stats = PercentageChangeStatistician::fromSources(
new PercentageChangeSource(User::class)
)
->start('2025-02-01')
->end('2025-02-28')
->get();
echo $stats['users_percentage_change'];
Bu, mevcut performansı bir önceki dönemle karşılaştıran dashboard kartları oluştururken yardımcı olur.
Sorgu Oluşturucuları Kullanma
Sorgu Oluşturucuları Kullanma
Bazı istatistikler tüm modellerle değil, belirli durumlarla ilgilidir. Yalnızca aktif kullanıcıları, tamamlanmış siparişleri veya ödenmiş faturaları saymak isteyebilirsiniz.
Paket, sorgu oluşturucuları ile de çalışır:
use Illuminate\Support\Facades\DB;
use Omaressaouaf\LaravelStatistician\Enums\Aggregate;
use Omaressaouaf\LaravelStatistician\Sources\AggregateSource;
use Omaressaouaf\LaravelStatistician\Statisticians\AggregateStatistician;
$stats = AggregateStatistician::fromSources(
new AggregateSource(DB::table('users')->where('is_active', true), Aggregate::COUNT)
)->get();
Bu, istatistiklerin gerçek yaşam kullanım durumları için yeterince esnek olmaktadır.
İstatistikleri Önbellekleme
İstatistikleri Önbellekleme
Bazı dashboard istatistikleri her istekte yeniden hesaplanması gerekmez. Laravel Statistician, önbellekleme desteği de sunar:
$stats = AggregateStatistician::fromSources(
new AggregateSource(User::class)
)
->cacheFor(3600)
->get();
Ayrıca belirli bir tarihe kadar önbellekleme yapabilirsiniz:
$stats = AggregateStatistician::fromSources(
new AggregateSource(User::class)
)
->cacheUntil(now()->addDay())
->get();
Ve önbelleği koşullu olarak temizleyebilirsiniz:
$stats = AggregateStatistician::fromSources(
new AggregateSource(User::class)
)
->clearCacheWhen(request()->boolean('refresh'))
->cacheFor(3600)
->get();
Bu, kullanıcıların hızlı yanıt beklediği ancak verilerin her saniyede bir tazelenmesi gerekmeyen dashboard’lar için idealdir.
Neden Bunu Geliştirdim?
Neden Bunu Geliştirdim?
Ben küçük paketler oluşturmaktan hoşlanıyorum; sıkıcı problemleri temiz bir şekilde çözüyor. Dashboard istatistikleri genellikle bir Laravel uygulamasının en zor kısmı değildir, ancak kod tabanını karmaşık hale getirebilirler. Genelde durum şu şekilde görünür:
// Kontrolcü
$totalUsers = User::whereBetween('created_at', [$start, $end])->count();
// Başka bir yerde
$users = User::whereDate('created_at', '>=', $start)
->whereDate('created_at', 'count();
// Başka bir dashboard widget'ı
$userCount = User::query()
->whereBetween('created_at', [$from, $to])
->count();
Bunların hiçbiri yalnızca kötü değil. Ancak zamanla, tutarsızlıklara yol açar.
Laravel Statistician, bu kalıbın etrafında küçük bir soyutlamadır. Ağır bir analiz sistemi değildir. Karmaşık bir raporlama motoru değildir. Sadece, istatistikleri tanımlama, yeniden kullanma, önbelleğe alma ve döndürmenin daha temiz bir yoludur.
Tasarım Felsefesi
Tasarım Felsefesi
Paket, bir dizi basit ilkeye dayanır. Öncelikle, API, okunabilir olmalıdır. Bir geliştirici, birden fazla dosya arasında zıplamadan neyin hesaplandığını anlamalıdır. İkincisi, yaygın dashboard ihtiyaçlarını önce karşılamalıdır: toplamlar, tarih aralıkları, grafik verileri, karşılaştırma istatistikleri ve önbellekleme gibi. Üçüncüsü, mevcut Laravel kalıplarıyla çalışmalıdır. Paket, yeni bir veri katmanı dayatmak yerine, Eloquent modelleri, sorgu oluşturucuları, model sınıfları ve tablo adları ile çalışmayı destekler. Son olarak, genişletilebilir kalmalıdır; her uygulama sonunda özel iş metriklerine ihtiyaç duyar, bu yüzden paket, genel geliştirici deneyimini korurken özel istatistikçileri destekler.
Bu Paket Ne Zaman Faydalıdır?
Bu Paket Ne Zaman Faydalıdır?
Laravel Statistician; admin panelleri, SaaS dashboardları, e-ticaret raporları, dahili araçlar, CRM istatistikleri, finans özetleri, kullanıcı aktivite raporları, grafik API’leri ve KPI widget’ları için faydalıdır. Aynı zamanda uygulamanın birkaç kısmının benzer istatistiklere ihtiyaç duyduğu durumlarda özellikle kullanışlıdır.
Ne Zaman İhtiyacınız Olmayabilir?
Ne Zaman İhtiyacınız Olmayabilir?
Eğer dashboard’ınız yalnızca bir veya iki basit sayı içeriyorsa, istatistikleriniz son derece özelse, zaten bir analiz sistemi kullanıyorsanız veya verileriniz ayrı bir depoda veya BI aracında işleniyorsa bu pakete ihtiyacınız olmayabilir. Bu paket, Laravel uygulamaları içindeki uygulama düzeyinde istatistikler içindir. Tam kapsamlı bir analiz altyapısını değiştirmek için değildir.
Son Düşünceler
Son Düşünceler
İstatistik mantığı, başlangıçta soyutlamak için çok küçük gibi görünen bir şeydir. Ancak dashboard büyüdükçe, çoğaltılmalar belirgin hale gelir. Laravel Statistician, Laravel uygulamalarının bu kısmını daha temiz hale getirme girişimimdir: istatistikleri bir kere tanımlamak, yeniden kullanmak, gruplamak, önbelleğe almak ve öngörülebilir bir formatta döndürmektir.
Paket açık kaynaklıdır ve Laravel geliştiricilerinden geribildirim almak isterim.
Repository:
https://github.com/omaressaouaf/laravel-statistician
Eğer Laravel’de dashboard’lar geliştiriyorsanız, umarım bu paket, istatistik sorgularını tekrar tekrar yazmaktan sizi kurtarır.
Kaynak: Orijinal Makale
- Problem
- Laravel Statistician Neler Yapıyor?
- Kurulum
- Temel Toplu İstatistik
- Özel Anahtarlar
- Tarih Aralığı Filtreleme
- Bir Çağrıda Birden Fazla İstatistik
- Toplam, Ortalama, Minimum ve Maksimum
- Tarihlere Göre Gruplandırılan İstatistikler
- Yüzdelik Değişim
- Sorgu Oluşturucuları Kullanma
- İstatistikleri Önbellekleme
- Neden Bunu Geliştirdim?
- Tasarım Felsefesi
- Bu Paket Ne Zaman Faydalıdır?
- Ne Zaman İhtiyacınız Olmayabilir?
- Son Düşünceler


