Links

DB Kütüphanesi

Veritabanı işlemleri için kullanabileceğiniz illuminate/database kütüphanesinin entegrasyonunu öğreneceğiz.
Eklentinizde bir veritabanına bağlanıp işlem yaptırmanız gerekiyor ise illuminate/database kütüphanesini entegre edebilirsiniz. Bu kütüphane gelişmiş sql builder'ı ile okunaklı ve güvenli sql komutları çalıştırmanızı sağlar.

Gerekli Paketlerin Kurulumu

composer require illuminate/database
composer require illuminate/events
composer require doctrine/dbal
Gerekli paketleri kurduktan sonra app/Helpers klasöründe DB.php adında bir dosya oluşturuyoruz. Dosyanın içeriği aşağıdaki gibi olabilir.
<?php
namespace App\Helpers;
use Illuminate\Container\Container;
use Illuminate\Database\Events\StatementPrepared;
use Illuminate\Database\Capsule\Manager as Capsule;
use Illuminate\Events\Dispatcher;
use Illuminate\Pagination\Paginator;
use Illuminate\Pagination\LengthAwarePaginator;
use PDO;
class DB extends Capsule
{
private static $customContainer;
private static $capsule;
private static $initialized = false;
public static function init()
{
self::$customContainer = new Container();
self::$capsule = new self(self::$customContainer);
self::$capsule->addConnection([
'driver' => 'pgsql',
'port' => extensionDb('postgrePort'),
'host' => extensionDb('postgreHost'),
'username' => extensionDb('postgreUsername'),
'password' => extensionDb('postgrePassword'),
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => ''
]);
self::$capsule->setEventDispatcher($dispatcher = new Dispatcher());
$dispatcher->listen(StatementPrepared::class, function ($event) {
$event->statement->setFetchMode(PDO::FETCH_ASSOC);
});
self::$capsule->setAsGlobal();
self::$initialized = true;
}
public static function database(string $dbName)
{
if (!self::$initialized) {
self::init();
}
$connections = self::$customContainer['config']['database.connections'];
$connections['default']['database'] = $dbName;
self::$customContainer['config']['database.connections'] = $connections;
return self::$capsule;
}
public function __call($method, $parameters)
{
return self::$capsule::connection()->$method(...$parameters);
}
public static function __callStatic($method, $parameters)
{
return self::$capsule::connection()->$method(...$parameters);
}
}
Sınıfımızı tanımladıktan sonra veritabanı işlemi yapacağımız kontrolcülerde şu şekilde kullanabiliriz:
  • Öncelikle use anahtar sözcüğü ile sınıfımızı import etmeliyiz.
use App\Helpers\DB;
Sonrasında kontrolcü sınıfımızın herhangi bir yerinde DB sınıfını çağırıp işlemlerimizi yaptırabiliriz.
$users = DB::database('example_application')->table('users')->get();
dd($users);
DB::database('') ifadesi bizim sınıfımıza özel dinamik olarak farklı veritabanlarına bağlanmayı sağlayan bir fonksiyondur. DB sınıfımız illuminate/database kütüphanesindeki Capsule sınıfından türetilmiştir. Dolayısıyla Laravel database dökümanındaki tüm özellikleri DB sınıfıyla kullanabilirsiniz.