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