安装

composer require topthink/think-migration

05.png

创建迁移工具文件

# 执行命令,创建一个操作文件,一定要用大驼峰写法,如下
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 {
        // 创建表第一个参数为表名
        $table = $this->table('users',array('engine'=>'InnoDB'));
        // 添加字段   limit->字段的长度 defalut->字段的默认值 comment-> 字段备注 null -> 默认为false,字段不能为空,设置为true 可以让字段为空
        $table->addColumn('username', 'string',array('limit' => 100,'default'=>'','comment'=>'用户名'))
              ->addColumn('password', 'string',array('limit' => 32,'default'=>md5('123456'),'comment'=>'用户密码'))
              ->addColumn('phone','string',array('limit' => 11,'comment' => '电话','null' => true))
              ->addColumn('email','string',array('limit' => 32,'default'=>'','comment' => '邮箱','null' => true))
              ->addColumn('avatar','string',array('limit' => 32,'default'=>'','comment' => '头像','null' => true)) // 
              ->addColumn('status','integer',array('limit' => 2,'default'=>0,'comment' => '账户状态 0-正常 1-已禁用'))
              ->addColumn('is_delete', 'boolean',array('limit' => 1,'default'=>0,'comment'=>'删除状态,1已删除'))
              // 添加唯一索引
              ->addIndex(array('username'), array('unique' => true))
               // 添加 create_time     与 update_time 两个字段
              ->addTimestamps()
              ->create();
    }

}

其他数据类型定义

<?php
 
use think\migration\Migrator;
use think\migration\db\Column;
 
class Stars extends Migrator
{
    public function change()
    {
        $table = $this->table('stars', ['collation' => 'utf8mb4_general_ci']);
        $table->addColumn(Column::char('phone',11)->setComment('手机号')->setDefault(null))
            ->addColumn(Column::enum('sex',['男','女'])->setComment('性别')->setDefault('男'))
            ->addColumn(Column::char('id_card',18)->setComment('身份证号码')->setDefault(null))
            ->addColumn(Column::decimal('price')->setComment('用户余额')->setDefault(null))
            ->addColumn(Column::tinyint('status')->setComment('用户当前状态')->setDefault(0))
            ->addColumn(Column::dateTime('created_at')->setComment('添加时间')->setDefault(null))
            ->addColumn(Column::dateTime('updated_at')->setComment('修改时间')->setDefault(null))
            ->addColumn(Column::dateTime('deleted_at')->setComment('删除时间')->setDefault(null))
            ->create();
    }
}

执行迁移工具

php think migrate:run
# 此时数据库便创建了prefix_users表.

01.png
02.png

数据填充

首先通过命令行安装Faker

composer require fzaninotto/faker

# 新版 支持php8.0
composer require fakerphp/faker

生成一个seed文件

php think seed:create Users
# 可以看到有一个新的文件.\database\seeds\Users.php

编写假数据的生成逻辑

 public function run()
    {
        // faker默认语言是英文会生成英文的数据,在创建实例的时候可以指定为中文
        $faker = \Faker\Factory::create('zh_CN');
        $rows = [];
        for ($i = 0; $i < 50; $i++) {
            $rows[] = [
                'username'      => $faker->name,//随机姓名
                'login_code'  =>   $faker->address,//随机地址
                'password'      => md5($faker->password),
//                $faker->email,//随机邮箱
//                $faker->numberBetween(20,60),//年龄随机在20-60之间
//                $faker->randomElement(['农民','工人','程序员']),//随机职业
//                $faker->phoneNumber,//随机手机号
//                $faker->name,
            ];
        }

        \think\facade\Db::table('users')->insertAll($rows);
    }

在命令行输入一下命令并执行

php think seed:run

出现下图红色的部分说明成功了
03.png

可以查看一下数据库
04.png