ThinkPHP5数据库迁移工具 migration

Migration文件作用

migration 文件的主要作用就是用来管理数据库的结构,其实它是一组SQL语句的抽象化,migration 文件可以创建表,删除表,增加字段,删除字段等等基本上所有的数据库操作,其实这就像你自己手动写SQL语句一样,只不过在 migration 中你不需要手动的写SQL语句,只需要按照它的规则语法调用。

migrate 命令介绍
​​migrate:breakpoint​​ 管理断点
​​migrate:create​​ 创建一个迁移文件
​​migrate:rollback​​ 回滚最后一个或特定的迁移
​​migrate:run​​ 迁移数据库
​​migrate:status​​ 显示迁移状态

1. Thinkphp5.1 使用 migration

thinkphp5 为开发者提供了一整套的 migration 解决方案,不过默认情况下 migration 是没有安装的,需要我们手动安装。将工作目录切换到tp5项目下,执行:

composer require topthink/think-migration v3.0.2

默认安装版本,更多版本地址:​ ​https://packagist.org/packages/topthink/think-migration​​

执行​​php think​​命令查看是否安装成功

2. create 命令 

语法格式:​​php think migrate:create TableName​​ 

​​TableName​​​ 格式:首字母大写的驼峰法。该命令是用来创建一个 migration 文件,比如这里我们创建一个 ​​Video​​ 的 migration 文件: 

php think migrate:create Video

 在项目的根目录下多了一个 database 目录,有一个migration文件夹,该文件夹就是用来存放 migration文件,打开可以看到我们刚才创建的 Video 的 migration 文件:

created ./database/migrations/202305060932127_video.php

文件格式命名规则:​​时间 + 随机数 + _ + 文件名​​

文件创建好之后,来看下它的内容:

<?php

use think\migration\Migrator;
use think\migration\db\Column;

class Video extends Migrator
{
    /**
     * Change Method.
     *
     * Write your reversible migrations using this method.
     *
     * More information on writing migrations is available here:
     * http://docs.phinx.org/en/latest/migrations.html#the-abstractmigration-class
     *
     * The following commands can be used in this method and Phinx will
     * automatically reverse them when rolling back:
     *
     *    createTable
     *    renameTable
     *    addColumn
     *    renameColumn
     *    addIndex
     *    addForeignKey
     *
     * Remember to call "create()" or "update()" and NOT "save()" when working
     * with the Table class.
     */
    public function change()
    {

    }
}

这里我需要给我上面创建的 Video 文件增加字段

​​Video​​ 表结构如下

字段 类型 说明
id int 主键
nickname varchar(16) 视频名称
email varchar(32) 邮箱
password varchar64) 密码

删除默认自带的 ​​change​​​ 方法,创建 ​​up()​​​ 方法和 ​​down()​​​ 方法。​​up()​​​ 方法是在执行 ​​run​​​ 命令执行的,​​down()​​​ 是在执行 ​​rollback​​ 命令执行的。

<?php

use think\migration\Migrator;
use think\migration\db\Column;

class Video extends Migrator
{
    /**
     * Change Method.
     *
     * Write your reversible migrations using this method.
     *
     * More information on writing migrations is available here:
     * http://docs.phinx.org/en/latest/migrations.html#the-abstractmigration-class
     *
     * The following commands can be used in this method and Phinx will
     * automatically reverse them when rolling back:
     *
     *    createTable
     *    renameTable
     *    addColumn
     *    renameColumn
     *    addIndex
     *    addForeignKey
     *
     * Remember to call "create()" or "update()" and NOT "save()" when working
     * with the Table class.
     */
    public function up()
    {
        $table = $this->table('video');
        $table->addColumn('name', 'string', ['limit' => 16, 'null' => false,'comment'=>'视频名称'])
        ->addColumn('email', 'string', ['limit' => 32, 'null' => false,'comment'=>'邮箱'])
        ->addColumn('password', 'string', ['limit' => 64, 'null' => false,'comment'=>'密码'])
        ->create();
    }
    public function down()
    {
        $this->dropTable('video');
    }

}

这样,一个可以创建 video 表的 migration 文件就创建完毕了,接下来,来学习下一个命令。

3. migrate:run 命令 

migration 文件创建完毕,还需要执行 ​​run​​ 命令才可以修改数据库:

注意,执行此步骤之前请正确配置了 ​​config/database.php​​​ 。 在这里的数据库是有前缀的​​eb_​​

php think migrate:run

 执行成功之后,查看数据库,多了两个表​​eb_migrations​​​和​​eb_video​​

之前我定义了 migration 只指定了 ​​nickname​​​, ​​email​​​, ​​password​​​ 三个字段,但是执行 ​​run​​​ 命令创建的表中有四个字段,多了一个 ​​id​​​ 主键?这是 ​​thinkphp5​​​ 为我们默认添加的!小伙伴注意啦!如果你的主键字段名为 ​​id​​ 就不需要自己手动的指定了。 

4. migrate:status 命令 

说明:显示迁移状态

# php think migrate:status
 Status  Migration ID    Started              Finished             Migration Name 
----------------------------------------------------------------------------------
     up  20230503032741  2023-05-06 17:12:50  2023-05-06 17:12:50  Video

5. migrate:roolback 命令

说明:回滚最后一个或特定的迁移 

执行回滚操作

php think migrate:rollback

这时候查看数据库和表结构,数据库表已经被删除,不存在了

6. 新增表字段
  

对表进行二次操作,不能在同一个脚本中二次编辑,只能新建脚本。

下面给表​​eb_video​​增加新字段,重新生成表结构

php think migrate:create Video2

created ./database/migrations/202305060932127_video2.php

Video2 文件内容

<?php

use think\migration\Migrator;

class Video2 extends Migrator
{
    public function up()
    {
        $table = $this->table('video');
        $table->addColumn('upload_time', 'string', ['limit' => 11, 'null' => false,'comment'=>'上传时间'])
            ->addColumn('user_id', 'string', ['limit' => 11, 'null' => false,'comment'=>'上传用户ID'])
            ->save();
    }
}

数据迁移

php think migrate:run

猜你喜欢

转载自blog.csdn.net/qq_32450471/article/details/130530203
今日推荐