thinkphp5系列之数据库迁移工具(轻松的修改跟共享数据库结构)

migration:一种数据库的版本控制,让团队在修改数据库结构的同时,保持彼此的进度一致。帮你更简单的管理数据库。基于原生 thinkPHP 5.0 命令行工具,融入了 Phinx 的数据库迁移;查看  Phinx文档获取更多帮助...


首先通过 composer 安装

composer require topthink/think-migration

在命令行下运行查看帮助,可以看到新增的命令

php think
 migrate
  migrate:breakpoint  Manage breakpoints
  migrate:create      Create a new migration
  migrate:rollback    Rollback the last or to a specific migration
  migrate:run         Migrate the database
  migrate:status      Show migration status
 seed
  seed:create         Create a new database seeder
  seed:run            Run database seeders

常用命令

查看可用命令

php think list

创建数据库迁移文件

php think migrate:create CreateUserTable

执行数据库迁移文件

php think migrate:run

返回到最近一次的migrate操作

php think migrate:rollback

thinkphp5数据迁移

  • 创建数据库迁移文件【创建迁移类,首字母必须为大写


php think migrate:create CreateUserTable

1499787174218058.png

第一次执行的时候会确认是否创建迁移目录;

确认之后;

这时会在项目根目录下执行的该命令;

那么在项目跟目录下会看到database/migrations/20170711153001_create_user_table.php;

默认有一个change方法


如果你的迁移脚本只会有一下操作

  • createTable(创建表)

  • renameTable(重命名表)

  • addColumn(添加字段)

  • renameColumn(重命名字段)

  • addIndex(添加索引)

  • addForeignKey(添加外键)

那么你只需要change方法就可以了,回滚的时候可以自动根据change里的操作来逆向操作,否则需要定义up和down两个方法,来标识迁移和回滚两个具体操作

定义了up和down方法后就不要再定义change方法了;

在change方法里操作数据表的时候,只能用create()或者是update()来完成;

而不能用save();

创建数据表

创建数据表使用create方法,并调用addColumn方法进行数据字段定义

public function change()
{
   $table = $this->table('user',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已删除'))
      ->addTimestamps()//默认生成create_time和update_time两个字段
      ->addIndex(array('username'), array('unique' => true))
      ->create();
}

生成的数据表结构如下:1499789728205003.png

默认会自动添加一个id自增主键

如果需要自定义设置主键自增,可如下修改:

public function change()
{
    $table = $this->table('user',array('engine'=>'MyISAM'));
    $table->setId('user_id')->setPrimaryKey('user_id') 
       ->addColumn('username', 'string',array('limit' => 15,'default'=>'','comment'=>'用户名'))
       ->create();
}

如果不需要主键自增,可以如下:

public function change()
{
    $table = $this->table('user',array('engine'=>'MyISAM'));
    $table->setId(false)->setPrimaryKey('user_id')
       ->addColumn('username', 'string',array('limit' => 15,'default'=>'','comment'=>'用户名'))
       ->create();
}

或者使用up和down

public function up ()
{
   $table = $this->table('user',array('engine'=>'MyISAM'));
   $table->setId('user_id') //关闭自动设置主键
      ->setPrimaryKey('user_id') //设置主键
      ->addColumn('username', 'string',array('limit' => 15,'default'=>'','comment'=>'用户名'))
      ->create();
}

public function down ()
{
   $this->dropTable('user');
}

执行迁移

php think migrate:run

执行回滚

php think migrate:rollback
#回滚所有
php think migrate:rollback -t 0

重命名和删除数据表

$this->table('user')->rename('user_rename');                 #重命名
$this->table('user')->drop();/$this->dropTable('user');     #删除

本站文章除注明转载外,均为本站原创或编译。欢迎任何形式的转载,但请务必注明出处,尊重他人劳动。

武斌博客 http://www.wubin.pro

Top