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.

Detaylı bilgi için: https://laravel.com/docs/8.x/queries#select-statements

Last updated