Teknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor HaberleriTeknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor HaberleriTeknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor Haberleri
Yazı Tipi BoyutlandırıcıAa
  • Anasayfa
  • Teknoloji
    • Siber Güvenlik
    • Yapay Zeka
    • Donanım
    • Bilim
  • Yazılım
  • Savunma & İstihbarat
  • Oyun
  • Yaşam
    • Finans
    • Sinema
    • Dünyadan Haberler
  • İş Birliği
Okuma: Ham SQL Tarih Fonksiyonlarını Kullanmayı Neden Bıraktım ve Laravel’de Carbon’a Geçtim
Paylaş
Yazı Tipi BoyutlandırıcıAa
Teknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor HaberleriTeknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor Haberleri
Ara
Bizi Takip Et
  • Hakkımızda
  • Gizlilik politikası
  • Tanıtım Yazısı ve Backlink Hizmeti
© 2026 Teknomers. All Rights Reserved.

Anasayfa » Ham SQL Tarih Fonksiyonlarını Kullanmayı Neden Bıraktım ve Laravel’de Carbon’a Geçtim

Yazılım

Ham SQL Tarih Fonksiyonlarını Kullanmayı Neden Bıraktım ve Laravel’de Carbon’a Geçtim

teknomers
Son güncelleme: 5 Mayıs 2026 17:01
teknomers
Paylaş
Paylaş


Bir Hata ile Başladı

VMMS – bir voucher yönetim sistemi inşa ederken, her şey yerel ortamda mükemmel çalışıyordu.

MySQL. Temiz sorgular. Hızlı sonuçlar.

Sonra, MariaDB çalışan bir sunucuya dağıttım.

Grafiklerin yarısı bozuldu.



Problem

Veri tabanı boyunca şöyle tarih sorguları yazmıştım:

// Bu MariaDB'de bozuluyor
DB::table('voucher_transactions')
    ->selectRaw()
    ->groupByRaw()
    ->get();

MONTH() ve MONTHNAME() MySQL fonksiyonlarıdır. MySQL’de iyi çalışırken, MariaDB’de farklı davranış sergileyebilirler — özellikle GROUP BY ile birlikte kullanıldıklarında.

Sonuç olarak? Ayların yanlış sırada görüntülenmesi. Tekrar eden girdiler. Kaybolan veriler.



Neden Bu Oluyor?

MySQL ve MariaDB yıllar içinde farklılaştı. Birçok sözdizimini paylaşsalar da, bazı fonksiyonları farklı şekilde işlerler — özellikle tarih gruplama ve sıralama konusunda.

Güvenli kural: Uygulamanızın hem MySQL hem de MariaDB’nde çalışmasını istiyorsanız, veritabanına özgü tarih fonksiyonlarına güvenmeyin.



Çözüm — Veriyi Al ve Carbon Kullan

Tarih hesaplamalarını SQL’de yapmak yerine, ham verileri çekip her şeyi PHP’de Carbon kullanarak işlemeyi tercih ettim:

// DB-bağımsız yaklaşım
$rows = VoucherTransaction::where(, $userId)
    ->whereYear(, $year)
    ->whereNull()
    ->get([, ]);

$byMonth = [];
foreach ($rows as $row) {
    $m = (int) $row->created_at->format();
    $status = strtolower($row->status);
    $byMonth[$m] = $byMonth[$m] ?? [=> 0, => 0];
    if ($status === ) $byMonth[$m][]++;
    if ($status === ) $byMonth[$m][]++;
}

ksort($byMonth);

Sonra ay adını almak için MONTHNAME() yerine Carbon kullandım:

$monthName = Carbon::create($year, $m, 1)->format();
// "Ocak", "Şubat", vb. döner.
// MySQL ve MariaDB'de aynı şekilde çalışır


Yılda Tüm Ay Grafiklerini Oluşturma

Tüm 12 ayı — boş olanlar dahil — gösterecek grafikler için, range(1, 12) kullanıyorum ve veri olmayan aylar için sıfır dolduruyorum:

return collect(range(1, 12))->map(function ($m) use ($byMonth, $year) {
    $d = $byMonth[$m] ?? [=> 0, => 0];
    return [
        => Carbon::create($year, $m, 1)->format(),
        => $d[],
        => $d[],
    ];
});

Bu, grafiklerde her ayın her zaman görünmesini garanti eder — veri olmasa bile. Temiz ve öngörülebilir.



Performans Hakkında Ne Olacak?

Sizce — tüm satırları çekmek ve PHP’de işlemek, SQL’de yapmaktan daha yavaş mı?

Çoğu uygulama için — evet, SQL agregasyonu daha hızlıdır.

Ancak pratikte bu kullanım durumu için:

  • Veriler önce kullanıcı ve yıla göre filtrelenir
  • Sonuç seti küçük (yılda kullanıcının 365 satırdan fazlası yok)
  • PHP işleme göz ardı edilebilir

Bir milyonlarca satırla çalışıyorsanız, bu yaklaşımın yeniden ele alınması gerekir. Ama tipik iş uygulamaları için yeterince hızlı ve taşınabilirlik bu sürece değer.



VMMS’de Kullandığım Diğer Carbon İpuçları

Tarihler arasında zaman olmadan karşılaştırma:

// Zaman karşılaştırma sorunlarını önlemek için SQL'de DATE() kullanın
->whereRaw(, [$now->toDateString()])
->whereRaw(, [$now->copy()->addDays(7)->toDateString()])

Gün sayısını hesaplama:

$deadline = Carbon::parse($t->deadline)->startOfDay();
$daysLeft = (int) $now->copy()->startOfDay()->diffInDays($deadline, false);

Burada false parametresi, diffInDays‘in geçmiş tarihler için negatif sayılar döndürmesini sağlar — bu da, geciken tespit açısından yararlıdır.

İşleme süresini hesaplama:

$minutes = Carbon::parse($row->process_initiate)
    ->diffInMinutes(Carbon::parse($row->process_accomplished));


Ders

Yerel MySQL davranışının üretim ile eşleşeceğini varsaymayın. Uygulamanız MariaDB, PostgreSQL veya başka bir veritabanında çalışabilir — tarih mantığınızı PHP’de Carbon ile tutun ve yalnızca standart SQL kullandığınızdan emin olun.

Bu, birçok hata ayıklama zamanından tasarruf eden küçük bir alışkanlıktır.



VMMS Hakkında

Bu ve diğer birçok ders, hükümet ofisleri, şirketler ve eğitim kurumları için tam bir voucher yönetim sistemi olan VMMS’i inşa etmekten geldi.

🔴 Canlı demo: https://vmms-app-production.up.railway.app/login

Gumroad’da mevcut:
👉 https://getvmms.gumroad.com/l/zeroqz

Sorularınızı yanıtlamaktan memnuniyet duyarım!

Kaynak: Orijinal Makale

Contents
  • Bir Hata ile Başladı
  • Problem
  • Neden Bu Oluyor?
  • Çözüm — Veriyi Al ve Carbon Kullan
  • Yılda Tüm Ay Grafiklerini Oluşturma
  • Performans Hakkında Ne Olacak?
  • VMMS’de Kullandığım Diğer Carbon İpuçları
  • Ders
  • VMMS Hakkında
Post-Autentikasyon için Otomatik Kiracı Değişimi Sunan Bir Laravel Paketi
Dropshipping Yaparken Önem Vermeniz Gerekenler
Yapay Zeka Ortakları ile Laravel Paketi Oluşturma ve Savaş Testi Yapma
Laravel ile Sıfır Veritabanı Kullanarak Markdown Tabanlı Bir CMS Nasıl Kurdum
Redis kullanmayan takımlar için Laravel kuyruk hata ayıklama paneli açık kaynak olarak geliştirildi
Bu Makaleyi Paylaş
Facebook Bağlantıyı Kopyala Yazdır
Paylaş
Önceki Makale Yeni Lego Batman Oyunu: Kara Şövalye Mirası Heyecan Veriyor
Sonraki Makale Acil! MetInfo CMS’de Kritik Güvenlik Açığı: Uzaktan Kod İhlali

Sanal Medya

FacebookBeğen
452Takip Et
PinterestSabitle
237Takip Et

Son Eklenenler

Laufey’in Savaş Taktiği Eski Yunan Üçlemesinden İlham Aldı
Oyun
Şimşek, coaxial kablodan apartmana girip PC’yi patlattı
Donanım
Outlook’un yıllardır güvenlik açığı, Fedora ve Dovecot güncellemesiyle ortaya çıktı
Donanım
Yaz Geliştirici Festivali 2026: Tüm Yenilikler Ortaya Çıkıyor
Oyun
Madonna’nın Grindr’daki Cesur ve Heyecan Verici Ticareti
Genel
Meta’nın AI Sunucuları İçin Tüm ABD’ye Çadırlar Kurması
Donanım
//

Siber güvenlik, yapay zeka ve savunma sanayiinden; finans ve sinema dünyasına uzanan geniş bir yelpaze. Teknomers; teknoloji, strateji ve yazılım dünyasını sade bir dille sizlerle buluşturuyor.

Kurumsal

  • Hakkımızda
  • Gizlilik politikası
  • Tanıtım Yazısı ve Backlink Hizmeti

Kategoriler

  • Teknoloji
  • Oyun
  • Sinema
  • Siber Güvenlik
  • Bilim
  • Finans
  • Dünyadan Güncel Haberler

Populer

  • TV'de Ücretsiz İzlenebilen Şifresiz Erotik Kanallar (2025 Güncel Frekans Listesi)

  • The Last of Us PC Kontrolleri: Hızlı Silah Değiştirme ve Tüm Tuşlar (2025)

  • Hogwarts Legacy'de Odaklanma İksiri Nasıl Yapılır?

Teknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor HaberleriTeknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor Haberleri
Bizi Takip Et
© 2026 Teknomers. All Rights Reserved.
Welcome Back!

Sign in to your account

Kullanıcı Adı veya E-posta Adresi
Şifre

Şifrenizi mi unuttunuz?