iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >如何使用 Phinx 在 PHP 中迁移数据库
  • 425
分享到

如何使用 Phinx 在 PHP 中迁移数据库

2024-02-27 19:02:30 425人浏览 八月长安
摘要

构建现代 WEB 应用程序通常涉及大量数据。 在开发和生产过程中管理这些数据(数据库)可能很多。 如果有多个开发人员和多个必须手动实施更改的环境,则尤其如此。 数据库迁移可帮助开发人员跨多个环境

构建现代 WEB 应用程序通常涉及大量数据。 在开发和生产过程中管理这些数据(数据库)可能很多。

如果有多个开发人员和多个必须手动实施更改的环境,则尤其如此。

数据库迁移可帮助开发人员跨多个环境和开发人员轻松管理这些更改。

在本篇文章中我们将介绍如下几个方面:

  • 什么是数据库迁移。
  • 如何开始使用 Phinx 在 PHP 中进行数据库迁移。
  • 如何管理数据库中的表。

本文适用于具有基本 php 知识的读者。 它将帮助大家学习轻松(并且更好地)管理自己的数据库。

什么是数据库迁移

基本上,迁移包含我们希望对数据库进行的更改。 这些更改可能是创建或删除表、在表中添加或删除某些字段、更改列类型等等。

这些文件使得跨多个系统进行相同的更改变得容易,因为任何拥有这些文件的人都可以运行它们,并更新他们的数据库。

因此,在现实生活场景中,团队中的一些开发人员可以对 users 表进行更改,以允许性别字段接受比默认的男性和女性选项更多的选项,也许还有第三个选项。

进行此更改后,开发人员会创建迁移。 此迁移包括他们对数据库所做的更改——在本例中是对表中列的更改——其他开发人员可以通过运行迁移轻松地对他们自己的本地数据库进行此更改。

迁移就像数据库的版本控制,允许我们的团队定义和共享应用程序的数据库模式定义。 如果我们曾经不得不告诉队友在从源代码管理中提取更改后手动将一列添加到他们的本地数据库架构中,那么就遇到了数据库迁移解决的问题。 - Laravel

许多流行的 Web 框架已经内置了对迁移的支持。但在本文中,我们将探索在原生 PHP 中使用迁移。


什么是 Phinx?

Phinx 是一个 PHP 库,可让我们轻松管理 PHP 应用程序的数据库迁移。 - Phinx

无论我们是否使用 PHP 框架,Phinx 都可以轻松管理迁移。 它也很容易安装(我们稍后会看到)。

它附带了几个命令,使操作更容易。 它是完全可定制的(我们可以用它做任何想做的事情🙃)。 它也适用于多种环境,这意味着我们可以进行一些生产迁移、测试迁移和开发迁移。


Phinx 安装

我们可以使用 composer 将 Phinx 添加到任何 PHP 项目中。


$ mkdir php-migrations
$ cd php-migrations
$ composer init

第一个命令在当前目录 php-migrations 中创建一个文件夹,第二个命令进入其中。 最后一个命令启动一个交互式 shell

按照提示,按要求填写详细信息(默认值即可)。 我们可以设置项目描述、作者姓名(或贡献者姓名)、依赖项的最低稳定性、项目类型、许可证,并定义所需的依赖项。

当进入依赖项部分时,将 phinx 包 robmorgan/phinx 安装为依赖项。

接受其他默认值并继续生成 composer.JSON 文件。 生成的文件当前应如下所示:


{
    "name": "jiyik/php-migrations",
    "description": "A simple tutorial on how to use and manage migrations in PHP applications.",
    "type": "project",
    "require": {
        "robmorgan/phinx": "^0.12.10"
    },
    "license": "ISC",
    "autoload": {
        "psr-4": {
            "Zubs\\": "src/"
        }
    },
    "authors": [
        {
            "name": "jiyik",
            "email": "1028256334@qq.com"
        }
    ]
}

初始化 Phinx

安装 Phinx 后,需要对其进行初始化。 我们可以使用安装在 vendor 文件夹中的二进制文件轻松完成此操作。


$ ./vendor/bin/phinx init

这会将 phinx 的配置文件创建为 PHP 文件。 它也可以创建为 jsON 文件。 我更喜欢 JSON 进行配置,所以我将使用 JSON 格式。


$ ./vendor/bin/phinx init --fORMat=json

这是默认配置文件的样子:


{
    "paths": {
        "migrations": "%%PHINX_CONFIG_DIR%%/db/migrations",
        "seeds": "%%PHINX_CONFIG_DIR%%/db/seeds"
    },
    "environments": {
        "default_migration_table": "phinxlog",
        "default_environment": "development",
        "production": {
            "adapter": "Mysql",
            "host": "localhost",
            "name": "production_db",
            "user": "root",
            "pass": "",
            "port": 3306,
            "charset": "utf8"
        },
        "development": {
            "adapter": "mysql",
            "host": "localhost",
            "name": "development_db",
            "user": "root",
            "pass": "",
            "port": 3306,
            "charset": "utf8"
        },
        "testing": {
            "adapter": "mysql",
            "host": "localhost",
            "name": "testing_db",
            "user": "root",
            "pass": "",
            "port": 3306,
            "charset": "utf8"
        }
    },
    "version_order": "creation"
}

在这个配置文件中,请注意 Phinx 如何期望我们默认拥有一个 db/migrations 路径(用于我们的迁移)。 如果愿意,我们可以改变它,但我认为这很好,我会保留它。


$ mkdir db && db/migrations

Phinx 还附带了用于不同操作的命令,使其更易于在我们的项目中使用。


如何创建迁移

Phinx 使用类进行迁移。 要创建一个新的迁移(例如,创建一个 posts 表),请使用带有迁移名称的 create 命令。


$ ./vendor/bin/phinx create PostsTableMigration

phinx 迁移项目

这会在之前创建的 db/migrations 目录中创建一个 20220328122134_posts_table_migration.php 文件。 此文件使用 YYYYMMDDHHMMSS_my_new_migration.php 格式命名。 在这种格式中,前 14 个字符 YYYYMMDDHHMMSS 表示当前时间戳。

20220328122134_posts_table_migration.php 目前看起来像这样:


<?php
declare(strict_types=1);

use Phinx\Migration\AbstractMigration;

final class PostsTableMigration extends AbstractMigration
{
    
    public function change(): void
    {

    }
}

该文件(以及使用 Phinx 创建的所有其他迁移)继承了 Phinx\Migration\AbstractMigration 类。 此类具有与数据库交互所需的所有方法。

此迁移文件还包括更改方法。 这种方法最近在 0.2.0 版本中被引入到 Phinx,以实现 Phinx 的可逆迁移思想。

这些迁移文件只有一种 change 方法,其中包含执行某些操作的逻辑,让 Phinx 弄清楚如何扭转它。 而不是传统的使用 up 和 down 两种方法来创建和反转动作。

Phinx 仍然允许我们使用 up 和 down 方法。 但是当它们一起使用时,它会优先考虑 change 方法。 从而略过了其他方法。


如何管理数据表

数据表是构建结构化数据库的基础,也是 Phinx 提供的最重要的部分。

我们可以使用 PHP 代码和 Phinx 轻松管理数据库表。 Phinx 提供了一个强大的 table() 方法。 此方法检索 Table 对象的实例。

如何创建数据表

使用 Phinx 创建表非常容易。 使用带有表名的 table() 方法创建 Table 对象的新实例。


$table = $this->table('posts');

接下来,我们可以添加列及其设置。


$table->addColumn('title', 'string', ['limit' => 20])
    ->addColumn('body', 'text')
    ->addColumn('cover_image', 'string')
    ->addTimestamps()
    ->addIndex(['title'], ['unique' => true]);

在这里,我们创建了列 title、body、cover_image、created_at 和 updated_at。 还将标题的类型设置为包含 20 个或更少字符的字符串

将正文设置为一个文本字段,因此它可以容纳很长的帖子。 cover_image 也是一个字符串字段,它使用字符串的默认大小 (255)。

created_at 和 updated_at 字段是在 addTimestamps() 方法中自动生成的时间戳。

最后,我将 title 字段设置为 unique(就像在真实博客中一样)。

我们可以通过检查有效列类型来获取所有可用的列类型。 还可以通过选中有效列选项来获取所有可用的列选项。

最后,我们可以说应该使用 create 方法创建数据库表。


$table->create();

最后,我们的迁移文件的 change 方法应如下所示:


public function change(): void
{
    $table = $this->table('posts');

    $table->addColumn('title', 'string', ['limit' => 20])
        ->addColumn('body', 'text')
        ->addColumn('cover_image', 'string')
        ->addTimestamps()
        ->addIndex(['title'], ['unique' => true]);

     $table->create();
}

我们现在可以运行此迁移来创建我们的表。


如何运行迁移

创建迁移后,下一步是在数据库中强制执行这些所需的更改。 运行迁移实际上会强制执行这些更改。


$ ./vendor/bin/phinx migrate

执行完成之后,如果查看数据库 GUI 工具,我们会注意到创建的 posts 表带有一个附加字段,即 id 字段。 默认情况下,此字段也是主键字段。 它还会自动递增。

我们可以通过将其他字段指定为主字段或将 id 字段映射到所需的主字段来将主键更改为其他键。 后者包括普通 id 字段的自动递增能力。


$table = $this->table('posts', [
    'id' => false,
    'primary_key' => ['posts_key']
]);

$table = $this->table('posts', [
    'id' => 'posts_key',
]);

在第一种方法中,要使用的主键必须是表上的列(它不是自动创建的)。

我们还可以设置要运行迁移的环境。


$ ./vendor/bin/phinx migrate -e testing

如何反向迁移

逆向迁移可以通过运行 down 方法来实现。 这与向上迁移相反。 先前创建的表将被删除,添加的列将被删除,并且数据库将返回到其初始迁移前状态。


$ ./vendor/bin/phinx rollback

如何检查迁移状态

随着应用程序大小的增加,预计我们的数据库迁移将会增加。 因此,在某些时候,我们可能希望检查迁移的状态,以了解哪些已运行,哪些尚未运行。


$ ./vendor/bin/phinx status

phinx status 迁移状态


如何删除表

我们可以轻松地在 Table 对象上使用 drop 方法,然后使用 save 方法来持久化更改。


$this->table('posts')->drop()->save();

如何重命名表


$table = $this->table('posts');

$table->rename('articles')
    ->update();

要删除表,首先请检索该表。 然后使用带有新名称的 rename 方法,然后使用 update 方法来持久化此更改。


如何改变表的主键

我们还可以非常轻松地更改表的主键。


$table = $this->table('posts');

$table->changePrimaryKey('new_primary_key');

$table->update();

现在我们知道如何在 PHP 应用程序中设置迁移。

--结束END--

本文标题: 如何使用 Phinx 在 PHP 中迁移数据库

本文链接: https://www.lsjlt.com/news/568926.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何使用 Phinx 在 PHP 中迁移数据库
    构建现代 Web 应用程序通常涉及大量数据。 在开发和生产过程中管理这些数据(数据库)可能很多。 如果有多个开发人员和多个必须手动实施更改的环境,则尤其如此。 数据库迁移可帮助开发人员跨多个环境...
    99+
    2024-02-27
  • 如何使用PHP数据库迁移工具Phinx
    这篇文章给大家分享的是有关如何使用PHP数据库迁移工具Phinx的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1.安装composer require nhzex/think-phinx2.执...
    99+
    2023-06-29
  • PHP8.0中的数据迁移库:Phinx
    随着互联网技术的发展和应用范围的不断扩大,数据迁移变得越来越常见和重要。数据迁移是指将现有的数据库结构和数据移到不同环境或新的系统上的过程。数据迁移的过程中,可以包括从一个数据库引擎到另一个数据库引擎、从一个数据库版本到另一个数据库版本、不...
    99+
    2023-05-14
    PHP 数据迁移 Phinx
  • 如何在 Golang 中使用数据库迁移?
    非常抱歉,由于您没有提供文章标题,我无法为您生成一篇高质量的文章。请您提供文章标题,我将尽快为您生成一篇优质的文章。...
    99+
    2024-05-14
  • 如何使用DataPump迁移Oracle数据库
    这篇文章主要介绍如何使用DataPump迁移Oracle数据库,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!之前测试过使用RMAN迁移Oracle数据库(Oracle11.2.0.1...
    99+
    2024-04-02
  • 如何在Aurora数据库中实现数据迁移
    在Aurora数据库中实现数据迁移可以通过以下几种方式: 使用AWS Database Migration Service(DMS...
    99+
    2024-04-02
  • 如何在AmazonAurora中执行跨数据库迁移
    在Amazon Aurora中执行跨数据库迁移通常涉及将数据从一个数据库引擎迁移到另一个数据库引擎。以下是在Amazon Auror...
    99+
    2024-04-09
    AmazonAurora
  • 如何使用数据库迁移神器Flyway
    本篇内容介绍了“如何使用数据库迁移神器Flyway”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!数据迁移前...
    99+
    2024-04-02
  • 使用EFCORE迁移数据库
    一、迁移需要的依赖 Install-Package Microsoft.EntityFrameworkCore.SqlServer -version 3.1.1 Install-Pa...
    99+
    2024-04-02
  • 如何使用 PHP 进行 MySQL 数据迁移?
    php mysql 数据迁移指南:建立到源和目标数据库的连接。从源数据库提取数据。在目标数据库中创建匹配源表的结构。使用逐行插入逐行将数据从源数据库迁移到目标数据库。 如何使用 PHP...
    99+
    2024-05-12
    mysql php
  • 如何使用RMAN实现Oracle数据库迁移
    这篇文章主要介绍了如何使用RMAN实现Oracle数据库迁移,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1.打开RMAN[oracle@E...
    99+
    2024-04-02
  • PL/SQL在数据迁移中如何应用
    在数据迁移中,PL/SQL可以被用来执行以下操作: 数据提取和转换:通过PL/SQL编写的存储过程可以帮助提取源数据并对数据进行...
    99+
    2024-05-07
    PL/SQL
  • 如何迁移MySQL 5.7数据库
    这篇文章主要介绍如何迁移MySQL 5.7数据库,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!在源库用mysqldump备份数据库:mysqldump -uroot -p --def...
    99+
    2024-04-02
  • 在Oracle中如何执行数据库升级和迁移
    在Oracle数据库中,执行数据库升级和迁移通常涉及以下步骤: 创建数据库备份:在进行升级或迁移之前,首先应该创建数据库的完整备...
    99+
    2024-04-09
    Oracle
  • Linux系统中如何迁移MySQL数据库
    这篇文章将为大家详细讲解有关Linux系统中如何迁移MySQL数据库,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。第一步 &ndash; 执行MySQL转储在将数据库文件传输到新的VPS之前,我们...
    99+
    2023-06-27
  • MariaDB如何进行数据库迁移
    数据库迁移通常是指将数据从一个数据库服务器迁移到另一个数据库服务器,下面是使用MariaDB迁移数据库的一般步骤: 备份原始数据库...
    99+
    2024-04-02
  • 数据库批量迁移如何弄
    数据库批量迁移通常有以下几种方法:1. 数据库备份和恢复:首先,在源数据库中进行备份操作,生成一个数据库备份文件。然后,在目标数据库...
    99+
    2023-09-20
    数据库
  • 如何在Mac之间进行数据迁移,macbook怎么迁移数据
    更换了新的Mac电脑,怎样把旧Mac里面的文件、应用程序和帐号信息等迁移到新Mac上?如何在Mac之间进行数据迁移。 一、mac电脑怎么迁移数据 mac电脑怎么迁移数据?据苹果官方消息得知,Mac里储存的文件资料、系统设置、帐户信息...
    99+
    2023-09-01
    macos windows microsoft
  • Python使用FlaskMigrate模块迁移数据库
    目录前言安装初始化项目结构三大命令前言 本篇文章,阐述一下Flask中数据库的迁移 为什么要说数据库迁移呢? 比如我们以前有一个数据库,里面的信息有 id, name现在我想再加一个...
    99+
    2024-04-02
  • 在AmazonAurora中如何实现跨数据库的数据迁移和同步
    在Amazon Aurora中,可以使用DMS来实现跨数据库的数据迁移和同步。以下是实现步骤: 创建DMS实例:首先需要在AWS控...
    99+
    2024-04-09
    AmazonAurora
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作