ThinkPHP数据库迁移工具
发布人:shili8
发布时间:2023-02-10 04:33
阅读次数:42
安装
composer require topthink/think-migration
创建迁移工具文件
//执行命令,创建一个操作文件,一定要用大驼峰写法,如下
php think migrate:create AnyClassNameYouWant
//执行完成后,会在项目根目录多一个database目录,这里面存放类库操作文件
//文件名类似/database/migrations/20190615151716_any_class_name_you_want.php
编辑文件
<?php
use think\migration\Migrator;
use think\migration\db\Column;
class AnyClassNameYouWant 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()
{
// create the table
$table = $this->table('users',array('engine'=>'MyISAM'));
$table->addColumn('username', 'string',array('limit' => 15,'default'=>'','comment'=>'用户名,登陆使用'))
->addColumn('password', 'string',array('limit' => 32,'default'=>md5('123456'),'comment'=>'用户密码'))
->addColumn('login_status', 'boolean',array('limit' => 1,'default'=>0,'comment'=>'登陆状态'))
->addColumn('login_code', 'string',array('limit' => 32,'default'=>0,'comment'=>'排他性登陆标识'))
->addColumn('last_login_ip', 'integer',array('limit' => 11,'default'=>0,'comment'=>'最后登录IP'))
->addColumn('last_login_time', 'datetime',array('default'=>0,'comment'=>'最后登录时间'))
->addColumn('is_delete', 'boolean',array('limit' => 1,'default'=>0,'comment'=>'删除状态,1已删除'))
->addIndex(array('username'), array('unique' => true))
->create();
}
}
执行迁移工具
php think migrate:run
表支持的参数选项
选项 | 描述 |
---|---|
comment | 给表结构设置文本注释 |
row_format | 设置行记录模格式 |
engine | 表引擎?(默认?InnoDB ) |
collation | 表字符集?(默认?utf8\_general\_ci ) |
signed | 是否无符号?signed (默认?true ) |
常用列
- biginteger
- binary
- boolean
- date
- datetime
- decimal
- float
- integer
- string
- text
- time
- timestamp
- uuid
所有的类型都支持的参数
Option | Description |
---|---|
limit | 文本或者整型的长度 |
length | limit 别名 |
default | 默认值 |
null | 允许?NULL ?值 (不该给主键设置 |
after | 在哪个字段名后?(只对MySQL有效) |
comment | 给列设置文本注释 |
索引的用法
->addIndex(['email','username'], ['limit' => ['email' => 5, 'username' => 2]])
->addIndex('user_guid', ['limit' => 6])
->addIndex('email',['type'=>'fulltext'])
如上面例子所示,默认是普通索引
,mysql可设置生效复合索引
,mysql可以设置fulltext
.
自动版本升级降级
该项目可以升级和还原,就像git/svn一样rollback。
如果希望实现自动升级降级,那就把逻辑写在change方法里,只最终调用create
和update
方法,不要调用save
方法。
change
方法内仅支持以下操作
- createTable
- renameTable
- addColumn
- renameColumn
- addIndex
- addForeignKey
如果真的有调用其他方法,可以写到up
和down
方法里,这里的逻辑不支持自动还原,up写升级的逻辑,down写降级的逻辑。
public function change()
{
// create the table
$table = $this->table('user_logins');
$table->addColumn('user_id', 'integer')
->addColumn('created', 'datetime')
->create();
}
/**
* Migrate Up.
*/
public function up()
{
}
/**
* Migrate Down.
*/
public function down()
{
}
?