天天看点

tp6生成数据迁移 数据填充前言一、使用步骤总结

tp6生成数据迁移 数据填充

  • 前言
  • 一、使用步骤
    • 1.thinkphp6数据迁移
    • 2.thinkphp数据填充
  • 总结

前言

这里简单介绍一下 tp6数据迁移有两种创建模式

1.use think\migration\Migrator; 只能插件自带一些字段类型 如下:(biginteger,binary,boolean,date,datetime,decimal,float,integer,string,text,time,timestamp,uuid,),不支持 enum和tinyint 参考网址

另外,MySQL adapter 支持 enum 、set 、blob 和 json (json 需要 MySQL 5.7 或者更高)

Postgres adapter 支持 smallint 、json 、jsonb 和 uuid (需要 PostgresSQL 9.3 或者更高)

2.use think\migration\db\Column; 里面包含并支持数据库所有的字段类型

一、使用步骤

1.thinkphp6数据迁移

代码如下:

创建迁移文件

php think migrate:create Event
           

编辑数据表字段

方法一:

public function change()
    {
        $table  =  $this->table('events',array('engine'=>'MyISAM','collation'=>'utf8_unicode_ci'));
        $table->addColumn('id', 'integer',array('limit'  =>  11,'default'=>null,'comment'=>'用户id'))
            ->addColumn('title', 'string',array('limit'   => 30,'comment'=>'预约时间'))
            ->addColumn('img', 'string',array('limit'   => 255,'default'=>null,'comment'=>'订单编号'))
            //boolean 为短整型(tinyint 默认长度为1 无法更改)
           ->addColumn('score', 'boolean',array('comment'=>'预约状态'))
            ->addColumn('number', 'integer',array('limit'=>10,'comment'=>'分类方'))
            ->addColumn('detail', 'text',array('default'=>null,'comment'=>'备注'))
            ->addColumn('created_at', 'datetime',array('default'=>null,'comment'=>'创建时间'))
            ->addColumn('updated_at', 'datetime',array('default'=>null,'comment'=>'修改时间'))
            ->addColumn('deleted_at', 'datetime',array('default'=>null,'comment'=>'删除时间'))
            ->create();
    }
           

方法二:

public function change()
    {
        $table  =  $this->table('user_infos',array('engine'=>'MyISAM','collation'=>'utf8_unicode_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
           

2.thinkphp数据填充

安装数据填充插件

composer require fzaninotto/faker
           
composer require fakerphp/faker (新版  支持php8.0)
           

创建数据填充 文件

php think seed:create UserSeed
           

代码如下:

<?php

use think\migration\Seeder;

class UsersSeed extends Seeder
{
    /**
     * Run Method.
     *
     * Write your database seeder using this method.
     *
     * More information on writing seeders is available here:
     * http://docs.phinx.org/en/latest/seeding.html
     */
    public function run()
    {
        // faker默认语言是英文会生成英文的数据,在创建实例的时候可以指定为中文
        $faker = Faker\Factory::create('zh_CN');
        //初始化数组
        $rows = [];
        //拼装数组
        for ($i = 0; $i < 50; $i++) {
            $rows[] = [
                'title'     => $faker->userName,
                'img'     =>  $faker->imageUrl(),
                'score'       => $faker->numberBetween(100,3000),
                'number'    =>$faker->numberBetween(1,20),
                'detail'        => $faker->text,
                'created_at'      => $faker->date(),
                'updated_at'      => $faker->date(),
            ];
        }
        //截断数据表
        \app\demo\model\User::truncate('events');
        //执行批量填充(无法更新时间戳)
        \app\demo\model\User::insertAll($rows);
        //执行批量填充(自动更新时间戳)需在模型或config配置中修改时间戳自动写入
        (new UserInfo())->saveAll($rows);
    }
}
           

运行填充文件

php think seed:run
           

总结

thinkphp数据填充和数据迁移的方法和laravel的方法有些类似 所以这里不过多讲述 小白一枚欢迎大家提出一些宝贵的意见。