1
|
|
|
<?php |
2
|
|
|
declare(strict_types=1); |
3
|
|
|
|
4
|
|
|
namespace Longman\TelegramBot\Bootstrap; |
5
|
|
|
|
6
|
|
|
use Illuminate\Database\Capsule\Manager as Capsule; |
7
|
|
|
use Illuminate\Database\ConnectionResolver; |
8
|
|
|
use Illuminate\Events\Dispatcher; |
9
|
|
|
use Longman\TelegramBot\Application; |
10
|
|
|
|
11
|
|
|
use PDO; |
12
|
|
|
use function array_filter; |
13
|
|
|
use function env; |
14
|
|
|
use function extension_loaded; |
15
|
|
|
|
16
|
|
|
class SetupDatabase |
17
|
|
|
{ |
18
|
|
|
public function bootstrap(Application $app) |
19
|
|
|
{ |
20
|
|
|
$config = $this->getConfig(); |
21
|
|
|
$capsule = new Capsule($app); |
22
|
|
|
$capsule->addConnection($config); |
23
|
|
|
|
24
|
|
|
$capsule->setEventDispatcher(new Dispatcher($app)); |
25
|
|
|
|
26
|
|
|
$capsule->setAsGlobal(); |
27
|
|
|
|
28
|
|
|
// $capsule->bootEloquent(); |
29
|
|
|
|
30
|
|
|
$app->instance('db', $capsule); |
31
|
|
|
|
32
|
|
|
$app->bind('db.connection', function ($app) { |
33
|
|
|
return $app['db']->connection(); |
34
|
|
|
}); |
35
|
|
|
|
36
|
|
|
$app->bind('db.resolver', function ($app) { |
37
|
|
|
$resolver = new ConnectionResolver(['default' => $app['db.connection']]); |
38
|
|
|
$resolver->setDefaultConnection('default'); |
39
|
|
|
return $resolver; |
40
|
|
|
}); |
41
|
|
|
|
42
|
|
|
$app->enableExternalMySql($capsule->getConnection()->getPdo()); |
43
|
|
|
} |
44
|
|
|
|
45
|
|
|
private function getConfig(): array |
46
|
|
|
{ |
47
|
|
|
return [ |
48
|
|
|
'driver' => 'mysql', |
49
|
|
|
'host' => env('TG_DB_HOST', '127.0.0.1'), |
50
|
|
|
'port' => env('TG_DB_PORT', '3306'), |
51
|
|
|
'database' => env('TG_DB_DATABASE', 'forge'), |
52
|
|
|
'username' => env('TG_DB_USERNAME', 'forge'), |
53
|
|
|
'password' => env('TG_DB_PASSWORD', ''), |
54
|
|
|
'unix_socket' => env('TG_DB_SOCKET', ''), |
55
|
|
|
'charset' => 'utf8mb4', |
56
|
|
|
'collation' => 'utf8mb4_unicode_ci', |
57
|
|
|
'prefix' => env('TG_DB_PREFIX', ''), |
58
|
|
|
'prefix_indexes' => true, |
59
|
|
|
'strict' => env('TG_DB_STRICT', false), |
60
|
|
|
'engine' => null, |
61
|
|
|
'options' => extension_loaded('pdo_mysql') ? array_filter([ |
62
|
|
|
PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), |
63
|
|
|
]) : [], |
64
|
|
|
]; |
65
|
|
|
} |
66
|
|
|
} |
67
|
|
|
|