Thinkphp6 数据迁移和数据填充

〝 古人学问遗无力,少壮功夫老始成 〞

 在学习thinkphp框架时候,数据库的迁移是一个比较人性化的操作,不仅可以将数据库的结构以代码的形式保存下来,而且在团队开发中,能够在很大程度上增加团队的开发效率。如果这篇文章能给你带来一点帮助,希望给飞兔小哥哥一键三连,表示支持,谢谢各位小伙伴们。

目录

一、定义特殊字段类型

二、创建迁移文件

三、基础数据类型定义

四、其他数据类型定义

五、执行迁移

六、数据填充插件

七、创建数据填充文件

八、创建填充逻辑

九、数据填充


一、定义特殊字段类型

  • 官方给的数据库迁移文档中 ,只能定义很少的并且常见的数据类型
  • 对于enum和tinyint等类型是不支持的
<?php
// 官方引用
use think\migration\Migrator;

// 所有类型应该引用, 里面包含并支持数据库所有的字段类型
use think\migration\db\Column;

二、创建迁移文件

php think migrate:create Users

三、基础数据类型定义

<?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('name', 'string', ['limit' => 100, 'comment' => '姓名'])
            ->addColumn('avatar', 'string', ['limit' => 255, 'default' => '', 'comment' => '头像'])
            ->addColumn('birthday', 'date', ['limit' => 10, 'comment' => '生日'])
            ->addColumn('hometown', 'string', ['limit' => 50, 'default' => '', 'comment' => '家乡'])
            ->addColumn('age', 'integer', ['limit' => 3, 'default' => 0, 'comment' => '年龄'])
            ->addColumn('height', 'integer', ['limit' => 3, 'default' => 0, 'comment' => '身高'])
            ->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

六、数据填充插件

composer require fzaninotto/faker

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

七、创建数据填充文件

php think seed:create UserSeed

八、创建填充逻辑

  • 新增50条数据信息
<?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

猜你喜欢

转载自blog.csdn.net/weixin_41635750/article/details/124525479