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;
private static $customContainer;
private static $initialized = false;
public static function init()
self::$customContainer = new Container();
self::$capsule = new self(self::$customContainer);
self::$capsule->addConnection([
'port' => extensionDb('postgrePort'),
'host' => extensionDb('postgreHost'),
'username' => extensionDb('postgreUsername'),
'password' => extensionDb('postgrePassword'),
'collation' => 'utf8_unicode_ci',
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) {
$connections = self::$customContainer['config']['database.connections'];
$connections['default']['database'] = $dbName;
self::$customContainer['config']['database.connections'] = $connections;
public function __call($method, $parameters)
return self::$capsule::connection()->$method(...$parameters);
public static function __callStatic($method, $parameters)
return self::$capsule::connection()->$method(...$parameters);