跳转到内容

数据库迁移


注意

Phalcon 迁移已从 DevTools 中移除并迁移到单独的存储库。

包的 Git 仓库

https://github.com/phalcon/migrations

需求

  • PHP >= 7.5
  • Phalcon >= 5.0.0

通过 Composer 安装

composer require --dev phalcon/migrations

快速开始

快速开始所需的条件:

  • 配置文件位于您项目根目录(您也可以在 CLI 环境中将它们作为参数传递)
  • 创建数据库表结构
  • 执行命令以生成迁移

之后,您可以在另一个环境中执行该迁移(运行)以创建相同的数据库结构。

创建配置文件

<?php

use Phalcon\Config\Config;

return new Config([
    'database'    => [
        'adapter'  => 'mysql',
        'host'     => '127.0.0.1',
        'username' => 'root',
        'password' => '',
        'dbname'   => 'db-name',
        'charset'  => 'utf8',
    ],
    'application' => [
        'logInDb'              => true,
        'migrationsDir'        => 'db/migrations',
        // true - TIMESTAMP, false - versions
        'migrationsTsBased'    => true, 
        'exportDataFromTables' => [
            // Tables names
        ],
    ],
]);

注意

如果exportDataFromTables已设置,则数据将在每次迁移时导出

生成迁移

基本生成

vendor/bin/phalcon-migrations generate

**生成特定表并从中导出数据

vendor/bin/phalcon-migrations generate \
    --config=migrations.php \
    --table=users \
    --exportDataFromTables=users \
    --data=oncreate

运行迁移

vendor/bin/phalcon-migrations run

列出现有迁移

vendor/bin/phalcon-migrations list

使用示例

从特定迁移目录运行迁移

<?php

use Phalcon\Migrations\Migrations;

$migration = new Migrations();
$migration::run([
    'migrationsDir' => [
        __DIR__ . '/migrations',
    ],
    'config' => [
        'database' => [
            'adapter' => 'Mysql',
            'host' => 'phalcon-db-mysql',
            'username' => 'root',
            'password' => 'root',
            'dbname' => 'vokuro',
        ],
    ]
]);

迁移方法

每个迁移是一个单独的类,它作为一个特定数据库表的实体工作。在每个类内,不同的方法可能在迁移运行期间发生。

每个迁移文件(和类)可以实现特定方法,这些方法将根据请求的操作执行。每个方法封装的逻辑没有限制。

下表显示了迁移类的方法。它们按执行顺序存储,从最早到最晚。

向上运行

方法名称 描述
morph 修改表结构
afterCreateTable 在表创建后立即执行某些操作
up 表已创建并准备好使用
afterUp 用于某些特定情况的额外方法

向下运行

方法名称 描述
down 通常在这里放置表删除或数据清空
aferDown 全部清理后工作的额外方法
morph (来自前一个迁移) 因为迁移被回退,所有内容都需要返回到之前的状态

CLI 参数和选项

参数

参数 描述
generate 生成迁移
run 运行迁移
list 列出所有可用迁移

选项

动作 描述
--config=s 配置文件
--migrations=s 迁移目录。使用逗号分隔的字符串来指定多个目录
--directory=s 创建项目的目录
--table=s 要迁移的表。表名或带有星号的表前缀。默认:全部
--version=s 要迁移的版本
--descr=s 迁移描述(用于基于时间戳的迁移)
--data=s 导出数据 ['always' 或 'oncreate'](数据在迁移运行期间导入)
--exportDataFromTables=s 从特定表导出数据,使用逗号分隔的字符串
--force 强制覆盖现有迁移
--ts-based 基于时间戳的迁移版本
--log-in-db 在数据库表中保留迁移日志而不是文件中
--dry 尝试请求的操作而不对系统进行更改(仅用于生成)
--verbose 在操作期间输出调试信息(仅用于运行)
--no-auto-increment 禁用自增(仅用于生成)
--skip-ref-schema 跳过生成迁移中的 referencedSchema(仅用于生成)
--skip-foreign-checks 包裹SET FOREIGN_KEY_CHECKS查询在执行查询前后(仅用于运行)
--help 显示此帮助

基于时间戳的迁移

使用这种方法在多个开发者参与数据库结构管理时非常有用。在配置文件中使用'migrationsTsBased' => true或在 CLI 环境中使用--ts-based选项。此外,您需要指定后缀descr,它可以是任何您想要的内容,例如:语义版本。

当前命令

vendor/bin/phalcon-migrations generate --ts-based --descr=1.0.0

将生成具有此类名称的文件夹名

* 1582539287636860_1.0.0
* 1682539471102635_1.0.0
* 1782539471102635_1.0.0

迁移将按照从旧到新的顺序执行。

注意

无论何时运行迁移,应用程序都会扫描所有可用迁移及其状态,而不考虑其“年龄”。如果在之前的运行中有一个或多个未被执行,则将在下一次运行时执行。

无噪 Logo
无噪文档
25 年 6 月翻译
文档源↗