Veritabanı Hızlı Başlangıç (Laravel Veritabanı Bileşenine Dayalı)
webman/database, illuminate/database temel alınarak geliştirilmiştir ve bağlantı havuzu işlevselliği eklenmiştir, hem korotin hem de korotin olmayan ortamları desteklemektedir, kullanımı laravel ile aynıdır.
Geliştiriciler ayrıca Diğer Veritabanı Bileşenlerini Kullanma bölümünü referans alarak ThinkPHP veya diğer veritabanlarını kullanabilirler.
Dikkat
Mevcut kılavuz webman-v2 sürümüne göredir; eğer webman-v1 sürümünü kullanıyorsanız, lütfen v1 sürüm kılavuzuna bakın.
Veritabanı Kurulumu
composer require -W webman/database illuminate/pagination illuminate/events symfony/var-dumper
Kurulduktan sonra tekrar başlatmanız gerekir (reload geçerli değil).
İpucu
webman/database, laravel'inilluminate/database
'ine bağımlıdır, bu yüzden kurulum sırasında otomatik olarakilluminate/database
'in bağımlılık paketlerini de kuracaktır.Dikkat
Eğer sayfalama, veritabanı olayları veya SQL kaydetmeye ihtiyacınız yoksa, sadece
composer require -W webman/database
komutunu çalıştırmanız yeterlidir.
Veritabanı Konfigürasyonu
config/database.php
return [
// Varsayılan veritabanı
'default' => 'mysql',
// Çeşitli veritabanı konfigürasyonları
'connections' => [
'mysql' => [
'driver' => 'mysql',
'host' => '127.0.0.1',
'port' => 3306,
'database' => 'test',
'username' => 'root',
'password' => '',
'unix_socket' => '',
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'strict' => true,
'engine' => null,
'options' => [
PDO::ATTR_EMULATE_PREPARES => false, // swoole veya swow sürücüsü kullanıldığında gereklidir
],
'pool' => [ // Bağlantı havuzu konfigürasyonu
'max_connections' => 5, // Maksimum bağlantı sayısı
'min_connections' => 1, // Minimum bağlantı sayısı
'wait_timeout' => 3, // Bağlantı havuzundan bağlantı almak için beklemenin maksimum süresi, zaman aşımında istisna fırlatılır. Sadece korotin ortamında etkilidir
'idle_timeout' => 60, // Bağlantı havuzundaki bağlantıların maksimum boşta kalma süresi, zaman aşımında kapatılır ve geri alınır, bağlantı sayısı min_connections'a ulaşana kadar
'heartbeat_interval' => 50, // Bağlantı havuzu kalp atışı kontrol süresi, saniye cinsinden, 60 saniyeden küçük olması önerilir
],
],
],
];
pool
konfigürasyonu dışında, diğer konfigürasyonlar laravel ile aynıdır.
Bağlantı Havuzu Hakkında
- Her işlem kendi bağlantı havuzuna sahiptir, işlemler arasında bağlantı havuzları paylaşılmaz.
- Korotin açılmadığında, işlemler işlem içinde kuyruğa alınır, eşzamanlılık oluşmaz, bu yüzden bağlantı havuzunda maksimum 1 bağlantı olacaktır.
- Korotin açıldığında, işlemler işlem içinde eşzamanlı olarak yürütülür, bağlantı havuzu ihtiyaçlara göre dinamik olarak bağlantı sayısını ayarlar, en fazla
max_connections
'ı aşmaz, en azmin_connections
'dan az olmaz. - Bağlantı havuzundaki maksimum bağlantı sayısı
max_connections
olduğundan, veritabanı işlemleri için korotin sayısımax_connections
'dan fazlaysa, korotinler bağlantı almayı bekleyecektir, en fazlawait_timeout
saniye bekler, aşarsa istisna fırlatılır. - Boş durumda(hem korotin hem de korotin olmayan ortamlar için), bağlantılar
idle_timeout
süresi dolduğunda geri alınır, bağlantı sayısımin_connections
'a (min_connections 0 olabilir) ulaşana kadar.
Veritabanı Kullanım Örneği
<?php
namespace app\controller;
use support\Request;
use support\Db;
class UserController
{
public function db(Request $request)
{
$default_uid = 29;
$uid = $request->get('uid', $default_uid);
$name = Db::table('users')->where('uid', $uid)->value('username');
return response("merhaba $name");
}
}
Görüyoruz ki, kullanım laravel ile aynıdır, veritabanını işlemek için Db::table()
yöntemini kullanıyoruz.