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
Copy 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.
Copy <? 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.
Sonrasında kontrolcü sınıfımızın herhangi bir yerinde DB
sınıfını çağırıp işlemlerimizi yaptırabiliriz.
Copy $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