# DB Kütüphanesi

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.&#x20;

### Gerekli Paketlerin Kurulumu

```bash
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
<?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.

```php
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>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.liman.dev/eklenti-gelistirme/ileri-seviye/db-kuetuephanesi.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
