ThinkPHP5.1使用Migrate数据库迁移和数据填充

TP官方文档啥也没有

安装 topthink/think-migration

migration2.* 对应TP5.1,migration1.*对应TP5.0。否则不兼容

composer require topthink/think-migration=2.0.*

迁移

  1. 创建迁移类

    php think migrate:create CreateUserTable

    目录./database/migrateions/生成迁移文件

  2. 语法

在migrate中有三个方法

change:在run和rollback时执行(如果存在该方法就不会去执行up与down了)

up:在migrate:run时执行

down:在migrate:rollback时执行

一般将migrate文件中的change方法删除,up方法专门放置新增和更新表的操作,down方法放置删除表和删除字段操作

  • 新增表
 // create the table
$table = $this->table('user', ['id' => 'id', 'comment' => '用户表', 'engine' => 'InnoDB', '']);
$table->addColumn('name', 'string', ['limit' => 15, 'default' => '', 'comment' => '用户名'])
    ->addColumn('password', 'string', ['limit' => 15, 'default' => '', 'comment' => '密码',])
    ->addColumn('status', 'boolean', ['limit' => 1, 'default' => 0, 'comment' => '状态'])
    ->addIndex(['name'], ['unique' => true])//为user_name创建索引并设置唯一(唯一索引)
    ->addTimestamps()//默认生成create_time和update_time两个字段
    ->create();
 
  • 删除表
   $this->table('user')->drop();
  • 表新增字段
    $table = $this->table('user');
    $table->addColumn('nick_name', 'string', array('limit' => 255))
        ->update();
  • 删除字段
    $this->table('user');
    $table->removeColumn('test')//删除user表中的test字段
        ->save();
  • 改变某字段的属性
    $table = $this->table('user');
    $table->addColumn('nick_name', 'string', array('limit' => 50))
        ->update();
  • 改变某字段名
    $table = $this->table('term_info');
    $table->renameColumn('abcd','dcba')
        ->save();

填充

  1. 创建填充类

php think send:create UserSeeder

2.语法

   $data  =
           [
               'username'        =>  'admin' ,
               'nickname'        =>  'Bob',
               'password'        =>  '9OHkSqf4SZkZNkMuCzTwU58KSKF7qblCLgJKq6GuWjc',
               'create_time'     =>  date('Y-m-d H:i:s',time()),
               'update_time'     =>  date('Y-m-d H:i:s',time()),
            ];
        $this->table('user')->insert($data)->save();