-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCommand.php
executable file
·144 lines (122 loc) · 4.2 KB
/
Command.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
<?php
namespace think\migration;
use Phinx\Db\Adapter\AdapterFactory;
use think\Db;
use think\facade\Config;
use think\migration\adapter\InputAdapter;
use think\migration\adapter\OptimizedMySqlAdapter;
use think\migration\adapter\OutputAdapter;
abstract class Command extends \think\console\Command
{
/**
* @var \Phinx\Db\Adapter\AdapterInterface
*/
protected $adapter;
/**
* 配置指令
*/
protected function configure()
{
}
public function getAdapter()
{
if (isset($this->adapter)) {
return $this->adapter;
}
$options = $this->getDbConfig();
AdapterFactory::instance()->registerAdapter('mysql', OptimizedMySqlAdapter::class);
$adapter = AdapterFactory::instance()->getAdapter($options['adapter'], $options);
// Automatically time the executed commands
$adapter = AdapterFactory::instance()->getWrapper('timed', $adapter);
$adapter->setInput(new InputAdapter($this->input));
$adapter->setOutput(new OutputAdapter($this->output));
if ($adapter->hasOption('table_prefix') || $adapter->hasOption('table_suffix')) {
$adapter = AdapterFactory::instance()->getWrapper('prefix', $adapter);
}
$this->adapter = $adapter;
return $this->getAdapter();
}
/**
* 获取数据库配置
* @return array
*/
protected function getDbConfig()
{
$config = Db::connect()->getConfig();
if (0 == $config['deploy']) {
$dbConfig = [
'adapter' => $config['type'],
'host' => $config['hostname'],
'name' => $config['database'],
'user' => $config['username'],
'pass' => $config['password'],
'port' => $config['hostport'],
'charset' => $config['charset'],
'table_prefix' => $config['prefix'],
];
} else {
$dbConfig = [
'adapter' => explode(',', $config['type'])[0],
'host' => explode(',', $config['hostname'])[0],
'name' => explode(',', $config['database'])[0],
'user' => explode(',', $config['username'])[0],
'pass' => explode(',', $config['password'])[0],
'port' => explode(',', $config['hostport'])[0],
'charset' => explode(',', $config['charset'])[0],
'table_prefix' => explode(',', $config['prefix'])[0],
];
}
$dbConfig['default_migration_table'] = $this->getConfig('table', $dbConfig['table_prefix'] . 'migrations');
$dbConfig['version_order'] = 'creation';
return $dbConfig;
}
protected function getConfig($name, $default = null)
{
$config = Config::pull('migration');
return isset($config[$name]) ? $config[$name] : $default;
}
/**
* Verify that the migration directory exists and is writable.
*
* @param string $path
* @throws \InvalidArgumentException
* @return void
*/
protected function verifyMigrationDirectory($path)
{
if (!is_dir($path)) {
throw new \InvalidArgumentException(sprintf(
'Migration directory "%s" does not exist',
$path
));
}
if (!is_writable($path)) {
throw new \InvalidArgumentException(sprintf(
'Migration directory "%s" is not writable',
$path
));
}
}
/**
* Verify that the seed directory exists and is writable.
*
* @param string $path
* @throws \InvalidArgumentException
* @return void
*/
protected function verifySeedDirectory($path)
{
if (!is_dir($path)) {
throw new \InvalidArgumentException(sprintf(
'Seed directory "%s" does not exist',
$path
));
}
if (!is_writable($path)) {
throw new \InvalidArgumentException(sprintf(
'Seed directory "%s" is not writable',
$path
));
}
}
}