Tp6数据库迁移
Tp6数据库迁移
tp6官方文档上的数据库迁移操作描述简单,操作后记录下相关内容:
NO1:安装数据库迁移扩展包,执行命令:php require topthink/think-migration
NO2:创建迁移文件,文件名首字母需大写,使用大驼峰写法,执行命令:php think migrate:create MysqlTest ,执行后会在项目根目录生成文件夹database,文件夹下有生成的如20210715004947_mysql_test.php命名的类库操作文件
NO3:打开文件,可以看到有一个默认的change()方法,该方法内可以编写创建表及相关字段的创建,示例方法如下:
public function change()
{
$table = $this->table('testsql',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已删除'))
//->addColumn('created_at', 'integer',array('limit' => 10,'default'=>0,'comment'=>'创建时间'))
//->addColumn('updated_at', 'integer',array('limit' => 10,'default'=>0,'comment'=>'更新时间'))
->addIndex(array('username'), array('unique' => true))
->create();
}
NO4:执行迁移工具命令:php think migrate:run ,将会在数据库内创建表 xxx_testsql及方法内指定的字段,xxx_为表前缀。
NO5:如果我们需要往表内新增或者删除字段,需要执行回滚的操作,指令为:php think migrate:rollback ,之后修改NO3内的change,如打开注释的两个时间字段,之后再重新执行命令: php think migrate:run。
NO6:官方提到了两个方法up(),down(),一个是升级一个是降级,使用的时候需要注释掉方法change,执行run方法时对应的就是up(),执行rollback对应的方法就是down,所以示例如下:
public function up()
{
$table = $this->table('testsql',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();
}
public function down(){
$this->table('testsql')->drop();
}