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'in illuminate/database'ine bağımlıdır, bu yüzden kurulum sırasında otomatik olarak illuminate/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 az min_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 fazla wait_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.