天天看點

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的方法有些類似 是以這裡不過多講述 小白一枚歡迎大家提出一些寶貴的意見。