|
| 1 | +# 配置 |
| 2 | + |
| 3 | +当使用 [Init命令 ](/命令)初始化项目时,Phinx默认创建一个文件 `phinx.yaml` 在项目根目录。文件是 YAML 格式。 |
| 4 | + |
| 5 | +如果 `--configuration` 参数提供了,那Phinx会载入指定配置文件,否则会尝试寻找 `phinx.php` , `phinx.json`, `phinx.yaml` |
| 6 | + |
| 7 | +并加载。 |
| 8 | + |
| 9 | +注意 JSON 和 YAML 文件需要转化,PHP文件直接引用。意味着: |
| 10 | + |
| 11 | +* 配置文件必须返回一个配置数组 |
| 12 | +* 变量定义域是本地,\*\*\*\*\*\*\*(这句话不大理解) |
| 13 | +* 标准输出 |
| 14 | +* 不像 JSON 和 YAML,\*\*\*\*\*(这句话不大理解) |
| 15 | + |
| 16 | +``` |
| 17 | +require 'app/init.php'; |
| 18 | +
|
| 19 | +global $app; |
| 20 | +$pdo = $app->getDatabase()->getPdo(); |
| 21 | +
|
| 22 | +return array('environments' => |
| 23 | + array( |
| 24 | + 'default_database' => 'development', |
| 25 | + 'development' => array( |
| 26 | + 'name' => 'devdb', |
| 27 | + 'connection' => $pdo |
| 28 | + ) |
| 29 | + ) |
| 30 | + ); |
| 31 | +``` |
| 32 | + |
| 33 | +## Migration 路径 |
| 34 | + |
| 35 | +第一个选项指定了迁移脚本目录。 默认是 `%%PHINX_CONFIG_DIR%%/db/migrations` |
| 36 | + |
| 37 | +> `%%PHINX_CONFIG_DIR%% 自动替换为项目根目录` |
| 38 | +
|
| 39 | +如果要重写迁移脚本目录,需要增加以下代码到 yaml 配置文件 |
| 40 | + |
| 41 | +``` |
| 42 | +paths: |
| 43 | + migrations: /your/full/path |
| 44 | +``` |
| 45 | + |
| 46 | +也可以提供多个路径 |
| 47 | + |
| 48 | +``` |
| 49 | +paths: |
| 50 | + migrations: |
| 51 | + - application/module1/migrations |
| 52 | + - application/module2/migrations |
| 53 | +``` |
| 54 | + |
| 55 | +可以使用在你的路径中使用 `%%PHINX_CONFIG_DIR%% ` |
| 56 | + |
| 57 | +``` |
| 58 | +paths: |
| 59 | + migrations: %%PHINX_CONFIG_DIR%%/your/relative/path |
| 60 | +``` |
| 61 | + |
| 62 | +你也可以定义正则表达式的路径 |
| 63 | + |
| 64 | +``` |
| 65 | +paths: |
| 66 | + migrations: %%PHINX_CONFIG_DIR%%/module/*/{data,scripts}/migrations |
| 67 | +``` |
| 68 | + |
| 69 | +## 自定义迁移脚本基类 |
| 70 | + |
| 71 | +Phinx 默认迁移脚本基类是 AbstractMigration 。可以在配置文件的 `migration_base_class` 设置自定义的基类 |
| 72 | + |
| 73 | +``` |
| 74 | +migration_base_class: MyMagicalMigration |
| 75 | +``` |
| 76 | + |
| 77 | +## Seed 路径 |
| 78 | + |
| 79 | +第二个选项指定了Seed放置目录。 默认是` %%PHINX_CONFIG_DIR%%/db/seeds` |
| 80 | + |
| 81 | +> `%%PHINX_CONFIG_DIR%% 自动替换为项目根目录` |
| 82 | +
|
| 83 | +如果要重写Seed目录,需要增加以下代码到 yaml 配置文件 |
| 84 | + |
| 85 | +``` |
| 86 | +paths: |
| 87 | + seeds: /your/full/path |
| 88 | +``` |
| 89 | + |
| 90 | +也可以提供多个路径 |
| 91 | + |
| 92 | +``` |
| 93 | +paths: |
| 94 | + seeds: |
| 95 | + - /your/full/path1 |
| 96 | + - /your/full/path2 |
| 97 | +``` |
| 98 | + |
| 99 | +可以使用在你的路径中使用 `%%PHINX_CONFIG_DIR%% ` |
| 100 | + |
| 101 | +``` |
| 102 | +paths: |
| 103 | + seeds: %%PHINX_CONFIG_DIR%%/your/relative/path |
| 104 | +``` |
| 105 | + |
| 106 | +你也可以定义正则表达式的路径 |
| 107 | + |
| 108 | +``` |
| 109 | +paths: |
| 110 | + seeds: %%PHINX_CONFIG_DIR%%/your/relative/path |
| 111 | +``` |
| 112 | + |
| 113 | +## 环境 |
| 114 | + |
| 115 | +Phinx一个重要功能就是支持多个数据库环境。可以在本地开发环境使用迁移脚本,同样的脚本也可以在线上环境使用。环境数据在 `enviroments` 下 |
| 116 | + |
| 117 | +``` |
| 118 | +environments: |
| 119 | + default_migration_table: phinxlog |
| 120 | + default_database: development |
| 121 | + production: |
| 122 | + adapter: mysql |
| 123 | + host: localhost |
| 124 | + name: production_db |
| 125 | + user: root |
| 126 | + pass: '' |
| 127 | + port: 3306 |
| 128 | + charset: utf8 |
| 129 | + collation: utf8_unicode_ci |
| 130 | +``` |
| 131 | + |
| 132 | +可以定义一个新的环境叫做 `production` |
| 133 | + |
| 134 | +有一种情况,当多个开发者工作在不同的开发环境,或者当你需要根据不同的目的(分支,测试等)来区分环境时,可以使用环境变量 PHINX\_ENVIRONMENT 覆盖 yaml文件中的默认环境 |
| 135 | + |
| 136 | + export PHINX_ENVIRONMENT=dev-`whoami`-`hostname` |
| 137 | + |
| 138 | +## 表前缀后缀 |
| 139 | + |
| 140 | +可以定义数据表的前缀后缀 |
| 141 | + |
| 142 | +``` |
| 143 | +environments: |
| 144 | + development: |
| 145 | + .... |
| 146 | + table_prefix: dev_ |
| 147 | + table_suffix: _v1 |
| 148 | + testing: |
| 149 | + .... |
| 150 | + table_prefix: test_ |
| 151 | + table_suffix: _v2 |
| 152 | +``` |
| 153 | + |
| 154 | +## Socket 连接 |
| 155 | + |
| 156 | +当使用 MySQL adapter 时,可以用sockets连接替换网络连接。使用 `unix_socket` 配置 socket |
| 157 | + |
| 158 | +``` |
| 159 | +environments: |
| 160 | + default_migration_table: phinxlog |
| 161 | + default_database: development |
| 162 | + production: |
| 163 | + adapter: mysql |
| 164 | + name: production_db |
| 165 | + user: root |
| 166 | + pass: '' |
| 167 | + unix_socket: /var/run/mysql/mysql.sock |
| 168 | + charset: utf8 |
| 169 | +``` |
| 170 | + |
| 171 | +## 外部变量 |
| 172 | + |
| 173 | +Phinx会自动抓取所有以 PHINX\_ 为前缀的环境变量并使用在配置文件中。这个值将被 %%框在里面,注意名字要完全一致。比如`%%PHINX_DBUSER%%`。这很有用,当你不想你的数据库信息放进版本库中可以使用这个功能。 |
| 174 | + |
| 175 | +``` |
| 176 | +environments: |
| 177 | + default_migration_table: phinxlog |
| 178 | + default_database: development |
| 179 | + production: |
| 180 | + adapter: mysql |
| 181 | + host: %%PHINX_DBHOST%% |
| 182 | + name: %%PHINX_DBNAME%% |
| 183 | + user: %%PHINX_DBUSER%% |
| 184 | + pass: %%PHINX_DBPASS%% |
| 185 | + port: 3306 |
| 186 | + charset: utf8 |
| 187 | +``` |
| 188 | + |
| 189 | +## 支持的 Adapter |
| 190 | + |
| 191 | +Phinx 当前支持以下数据库adapter |
| 192 | + |
| 193 | +* [MySQL](http://www.mysql.com/):指定 `mysql` adapter |
| 194 | + |
| 195 | +* [PostgreSQL](http://www.postgresql.org/):指定 `pssql `adapter |
| 196 | + |
| 197 | +* [SQLite](http://www.sqlite.org/):指定 `sqlite` adapter |
| 198 | + |
| 199 | +* [SQL Server](http://www.microsoft.com/sqlserver):指定 `sqlsrv` adapter |
| 200 | + |
| 201 | +### SQLite |
| 202 | + |
| 203 | +声明 SQLite 数据库: |
| 204 | + |
| 205 | +``` |
| 206 | +environments: |
| 207 | + development: |
| 208 | + adapter: sqlite |
| 209 | + name: ./data/derby |
| 210 | + testing: |
| 211 | + adapter: sqlite |
| 212 | + memory: true # Setting memory to *any* value overrides name |
| 213 | +``` |
| 214 | + |
| 215 | +## Version 顺序 |
| 216 | + |
| 217 | +当执行回滚或者打印迁移脚本状态时,Phinx 顺序通过 `version_order` 控制 |
| 218 | + |
| 219 | +* `creation` (默认):迁移脚本按照创建时间排序,也就是按照文件名排序 |
| 220 | +* `execution`:迁移脚本按照执行顺序排序,也就是开始时间 |
| 221 | + |
| 222 | + |
| 223 | + |
0 commit comments