PHP 数据库迁移:工具与库完全指南

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

PHP 数据库迁移:工具与库完全指南



PHP Web 应用程序的开发与数据库结构的管理密不可分。在项目演进过程中,数据库模式不断变化:添加新表、修改字段、引入索引。在不同环境(本地环境、预发布环境、生产环境)下手动执行 SQL 查询会导致错误、数据丢失和混乱。解决此问题的方法是数据库迁移——一种以编程方式对模式变更进行版本控制和应用的方法。



什么是迁移以及为什么需要它们?

迁移是一个包含两个方法的 PHP 类:up()(应用变更)和 down()(回滚变更)。每个迁移都有一个唯一标识符(通常是时间戳),并按顺序执行。使用迁移的主要优点:

  • 数据库模式版本控制——所有变更历史都存储在代码中(通常使用 Git)。
  • 部署自动化——只需执行一个命令即可更新任何服务器上的数据库。
  • 安全性——能够回滚失败的变更。
  • 团队协作——所有开发人员自动同步数据库结构。


PHP 中流行的迁移库

我们来介绍三种最常用的工具:Phinx、Doctrine Migrations 以及内置的 Laravel Migrations。



1. Phinx (robmorgan/phinx)

Phinx 是一个独立于框架的迁移和数据填充(用测试数据填充)工具。它支持 MySQL、PostgreSQL、SQLite、SQL Server 等数据库管理系统。通过 Composer 安装:

composer require robmorgan/phinx

创建用户表的迁移示例:

<?phpuse Phinx\\Migration\\AbstractMigration;

class CreateUsersTable extends AbstractMigration{ public function up() { $table = $this->table('users'); $table->addColumn('username', 'string', ['limit' => 50]) ->addColumn('email', 'string') ->addColumn('password', 'string') ->addColumn('created_at', 'datetime') ->addIndex(['email'], ['unique' => true]) ->create(); }

public function down() { $this->table('users')->drop()->save(); }}

Phinx 提供了方便的 DSL(领域特定语言)来描述模式,并内置了对数据填充(seeders)的支持。主要命令:

  • phinx migrate——应用所有新的迁移。
  • phinx rollback——回滚上一次迁移。
  • phinx status——显示迁移状态。
  • phinx seed:run——用测试数据填充数据库。


2. Doctrine Migrations

Doctrine Migrations 是 Doctrine ORM 生态系统的一部分,但也可以独立使用。它与 Doctrine DBAL(数据库抽象层)有强大的集成。安装:

composer require doctrine/migrations

使用 Doctrine DBAL 的迁移示例:

<?phpuse Doctrine\\DBAL\\Migrations\\AbstractMigration;use Doctrine\\DBAL\\Schema\\Schema;

class Version20240101000000 extends AbstractMigration{ public function up(Schema $schema) { $table = $schema->createTable('users'); $table->addColumn('id', 'integer', ['autoincrement' => true]); $table->addColumn('username', 'string', ['length' => 50]); $table->addColumn('email', 'string'); $table->setPrimaryKey(['id']); $table->addUniqueIndex(['email']); }

public function down(Sc

推荐