Bağlantı Ayarları
Veritabanı sürücüsünü, karakter setini ve bağlantı zaman aşımı değerlerini yapılandırın.
Veritabanı ayarları projenin Config/Database.php dosyasında tutulur. KUT projeleri farklı bağlantı profilleri tanımlayabilir.
MySQLi örneği
'database' =>
[
'driver' => 'mysqli',
'host' => 'localhost',
'database' => 'blog',
'user' => 'root',
'password' => '',
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'connectTimeout' => 5,
'readTimeout' => 15
]
Zaman aşımı ayarları
connectTimeout, bağlantı kurulurken; readTimeout ise sunucudan cevap beklerken uygulanır. Yanıt vermeyen bir veritabanının PHP işçisini süresiz tutmasını engeller.
Karakter seti ve 4 baytlık karakterler
Bağlantı utf8mb4 değilse (ör. 3 baytlık utf8) MySQL, emoji gibi 4 baytlık karakterleri ???? olarak kaydeder. Sorgu oluşturucu sorguya gömdüğü değerlerde (where, set, insert değerleri) bu durumda 4 baytlık karakterleri HTML sayısal varlığına (örneğin 😀) çevirir. İçerik HTML olarak basıldığında aynı karakter görünür. charset değeri utf8mb4 ise değer olduğu gibi saklanır. Hazırlanmış sorgularla bağlanan parametreler bu dönüşümden geçmez, sürücüye aynen gider. Emoji ve benzeri karakterleri gerçek karakter olarak saklamak için bağlantıyı ve tabloyu utf8mb4 yapın.
totalRows() davranışı
totalRows(true) yeni bir COUNT sorgusu çalıştırmaz. Son derlenmiş sorguyu limitsiz olarak yeniden çalıştırır ve where durumunu sıfırlamaz.
// Yanlış: sorgu henüz derlenmedi, koşul yok sayılır
$total = Table::where('status', 'active')->totalRows(true);
// Doğru: önce çalıştır, sonra say
$request = Table::where('status', 'active');
$rows = $request->result();
$total = $request->totalRows(true);
// Satır içi kullanım da doğrudur
$total = Table::where('status', 'active')->get()->totalRows(true);
where koşulu bağlantı üzerinde kalır ve sonraki sorgulara sızabilir. Bağlantı Singleton olduğundan derlenmiş sorgu istek boyunca paylaşılır.