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 表结构如下
字段 | 类型 | 说明 |
id | int | 主键 |
nickname | varchar(16) | 视频名称 |
varchar(32) | 邮箱 | |
password | varchar64) | 密码 |
删除默认自带的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