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文件格式命名规则:​​时间 + 随机数 + _ + 文件名​​

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

<?phpuse 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​​ 表结构如下

字段类型说明
idint主键
nicknamevarchar(16)视频名称
emailvarchar(32)邮箱
passwordvarchar64)密码

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

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 StatusMigration IDStartedFinished Migration Name ---------------------------------------------------------------------------------- up202305030327412023-05-06 17:12:502023-05-06 17:12:50Video

5. migrate:roolback 命令

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

执行回滚操作

php think migrate:rollback

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

6.新增表字段

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

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

php think migrate:create Video2created ./database/migrations/202305060932127_video2.php

Video2 文件内容

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