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

1
composer require illuminate/database
2
composer require illuminate/events
3
composer require doctrine/dbal
Copied!
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.
1
<?php
2
namespace App\Helpers;
3
4
use Illuminate\Container\Container;
5
use Illuminate\Database\Events\StatementPrepared;
6
use Illuminate\Database\Capsule\Manager as Capsule;
7
use Illuminate\Events\Dispatcher;
8
use Illuminate\Pagination\Paginator;
9
use Illuminate\Pagination\LengthAwarePaginator;
10
use PDO;
11
12
class DB extends Capsule
13
{
14
private static $customContainer;
15
private static $capsule;
16
private static $initialized = false;
17
18
public static function init()
19
{
20
self::$customContainer = new Container();
21
self::$capsule = new self(self::$customContainer);
22
self::$capsule->addConnection([
23
'driver' => 'pgsql',
24
'port' => extensionDb('postgrePort'),
25
'host' => extensionDb('postgreHost'),
26
'username' => extensionDb('postgreUsername'),
27
'password' => extensionDb('postgrePassword'),
28
'charset' => 'utf8',
29
'collation' => 'utf8_unicode_ci',
30
'prefix' => ''
31
]);
32
self::$capsule->setEventDispatcher($dispatcher = new Dispatcher());
33
$dispatcher->listen(StatementPrepared::class, function ($event) {
34
$event->statement->setFetchMode(PDO::FETCH_ASSOC);
35
});
36
self::$capsule->setAsGlobal();
37
self::$initialized = true;
38
}
39
40
public static function database(string $dbName)
41
{
42
if (!self::$initialized) {
43
self::init();
44
}
45
$connections = self::$customContainer['config']['database.connections'];
46
$connections['default']['database'] = $dbName;
47
self::$customContainer['config']['database.connections'] = $connections;
48
return self::$capsule;
49
}
50
51
public function __call($method, $parameters)
52
{
53
return self::$capsule::connection()->$method(...$parameters);
54
}
55
56
public static function __callStatic($method, $parameters)
57
{
58
return self::$capsule::connection()->$method(...$parameters);
59
}
60
}
61
Copied!
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.
1
use App\Helpers\DB;
Copied!
Sonrasında kontrolcü sınıfımızın herhangi bir yerinde DB sınıfını çağırıp işlemlerimizi yaptırabiliriz.
1
$users = DB::database('example_application')->table('users')->get();
2
dd($users);
Copied!
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.
Last modified 3mo ago
Export as PDF
Copy link