ThinkPHP5.1 数据库迁移migration与数据填充Faker的使用_tp框架搬迁后数据库不能写入-程序员宅基地

技术标签: 数据填充  faker  migration  数据库迁移  PHP  tp  

介绍

之前在用Laravel写项目的时候发现数据库迁移和数据填充很好用,由于新的项目需要使用TP5.1框架开发,所以打算在TP也使用这种方式管理数据,通过查找资料整理了一下使用方法。

think-migration 使用方法

通过 composer 安装

由于think-migration最新版本需要TP6.0框架,所以在TP5.1下安装需要指定2.0.*版本

composer require topthink/think-migration=2.0.*

安装好之后在控制台输入命令查看如否有一下命令

php think

在这里插入图片描述

创建迁移类文件

创建迁移类,首字母必须为大写

 php migrate:create Users

首次生成会有如下提示
在这里插入图片描述
输入 ‘y’ 或者 ‘yes’
在这里插入图片描述
成功生成了一个迁移类,打开后可以看到有一个默认的 change 方法
在这里插入图片描述
在change方法内编写如下代码:

	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();
	}

由于TP官方文档这部分写的很简洁,有些用法并未写出,这里可以参考phinx 的文档来使用
phinx官方文档
phinx中文文档

生成数据库表

change方法编写完成后在控制台输入以下命令,即可自动创建数据表

php think migrate:run

查看自动创建的表
在这里插入图片描述
如果数据表创建的有误或者需要新增、修改、删除字段,可以使用php think migrate:rollback命令回滚,修改完之后再次执行 php think migrate:run 即可

数据填充

我们在创建完数据表格后往往需要做一些假数据,在TP中我们可以通过composer来安装这个拓展库

安装Faker

在命令行输入以下命令

composer require fzaninotto/faker

生成seed文件

在命令行输入以下命令

 php think seed:create UserSeeder

首次创建seed文件会有以下提示
在这里插入图片描述
输入 ‘y’ 或者 'yes‘
在这里插入图片描述
成功生成seed文件

编写假数据的生成逻辑

打开生成的seed文件,在run方法里面编写逻辑

    public function run()
    {
    
   	    // faker默认语言是英文会生成英文的数据,在创建实例的时候可以指定为中文
        $faker = Faker\Factory::create('zh_CN');

        $data = [];
        // 循环生成50条数据
        for ($i = 0; $i < 50; $i++) {
    
            $data[] = [
                'username'      => $faker->name,
                'password'      => md5($faker->password),
                'phone'         => $faker->phoneNumber,
            ];
        }
		
		// 将输入插入users表中
        $this->insert('users', $data);
    }

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

 php think seed:run 

在这里插入图片描述
出现以上提示就表示数据已经生成了,查看下数据库,已经出现了数据
在这里插入图片描述

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Especial_/article/details/101771992

智能推荐

mmcv 对比 cv2 处理视频速度_mmcv和opencv-程序员宅基地

文章浏览阅读990次。import osimport timesource = './11/2021-4-13-10-41-51.mp4'# 将视频转成图片序列后的分辨率new_width = 224new_height = 224import mmcvs = time.time()# 读取视频video = mmcv.VideoReader(source)if video is None : print('Warning: unable to open video source: ', sou._mmcv和opencv

python APScheduler 执行定时任务_apscheduler 每5s执行-程序员宅基地

文章浏览阅读7.3k次,点赞4次,收藏26次。入门任务:每隔5s打印一个1from apscheduler.schedulers.background import BackgroundScheduler, BlockingSchedulerscheduler = BlockingScheduler()def func(): print(1)job = scheduler.add_job(func, trigger..._apscheduler 每5s执行

第四题:猫狗队列问题_class pet class cat extends pet-程序员宅基地

文章浏览阅读434次。题目要求:现有猫狗类如下:class Pet{ private String type; public Pet(String type){ this.type = type; } public String getType() { return type; }}class Dog extends Pet{..._class pet class cat extends pet

Android.graphics.Camera-程序员宅基地

文章浏览阅读2.3k次。概要:Camera(相机),但是这里的android.graphics.Camera不同于hardware.Camera。它主要用于2d图像实现3d效果。Camera的一系列,旋转,平移方法。实质上改变的是内部的Matrix变量。最后我们可以通过camera.getMatrix(matrix)方法。获取Matrix的值。之后就可以通过Matrix来改变图像了。分析:_android.graphics.camera

倒计时计时器:Android电商倒计时,源码和教程-程序员宅基地

文章浏览阅读55次。countdown一个简单的计时器提供了一些方法设置marginpublic void setLinearLayoutMargin(int left, int top, int right, int bottom)public void setTextViewMargin(int left, int top, int right, int bottom)设置Paddingpublic void s..._倒计时app源码

谷歌浏览器数据备份与还原_谷歌浏览器升级前会自动备份数据吗-程序员宅基地

文章浏览阅读2.1k次。Google Chrome Backuphttp://www.parhelia-tools.com/products/gcb/googlechrome.aspx_谷歌浏览器升级前会自动备份数据吗

随便推点

(每日一练c++)CC196 找出字符串_给定一个string数组str,其是由一个排过序的字符串数组插入了一些空字符串得到的,-程序员宅基地

文章浏览阅读115次,点赞3次,收藏3次。描述给定一个string数组str,其是由一个排过序的字符串数组插入了一些空字符串得到的,同时给定数组大小n和需要查找的stringx,请用时间复杂度在log级别的算法返回该串的位置(位置从零开始)。测试样例:["a","b","","c","","d"],6,"c"返回:3class Finder {public: int findString(vector<string> str, int n, string x) { int size ._给定一个string数组str,其是由一个排过序的字符串数组插入了一些空字符串得到的,

COM组件设计与应用(十六)---连接点(vc.net)_[default, source]-程序员宅基地

文章浏览阅读536次。COM组件设计与应用(十六) 连接点(vc.net) 作者:杨老师 下载源代码 一、前言   上回书介绍了回调接口,在此基础上,我们理解连接点就容易多了。 二、原理 图一、连接点组件原理图。_[default, source]

python flask框架发布问答平台注册页面_使用Python的Flask框架表单插件Flask-WTF实现Web登录验证...-程序员宅基地

文章浏览阅读71次。表单是让用户与我们的网页应用程序交互的基本元素。Flask 本身并不会帮助我们处理表单,但是 Flask-WTF 扩展让我们在我们的 Flask 应用程序中使用流行的 WTForms 包。这个包使得定义表单和处理提交容易一些。Flask-WTF我们想要使用 Flask-WTF 做的第一件事情(在安装它以后,GitHub项目页:https://github.com/lepture/flask-wtf..._python flask 问卷

python类和对象的定义_Python类和对象的定义与实际应用案例分析-程序员宅基地

文章浏览阅读77次。本文实例讲述了Python类和对象的定义与实际应用。分享给大家供大家参考,具体如下:1.DVD管理系统# -*- coding:utf-8 -*-#! python3class dvd:def __init__(self,name,price,state):self.name=name;self.price=priceself.state=statedef __str__(self):stat='..._if self.state in self.operations

python+adb让android设备灭屏并监听屏幕亮灭状态_如何用代码使监控黑屏-程序员宅基地

文章浏览阅读1.9k次。import osfrom time import sleepdef screenIsAwaked(): ''' 判断屏幕亮屏状态 返回 True:屏幕亮屏 返回 False:屏幕灭屏 ''' adb = 'adb shell dumpsys window policy|findstr mAwake' with os.popen(adb) as f: res = f.read() return True if 'true'_如何用代码使监控黑屏

Word中没有出现Endnote工具条的一般解决方案_word没有endnote插件,要下载插件吗-程序员宅基地

文章浏览阅读1.1w次。http://blog.sciencenet.cn/blog-260374-513670.html处理步骤如下,以Office word 2007为例,word 2003等版本可以参考处理:1.在word中手工添加endnote加载项。左上角的office按钮-word选项-加载项-左下方COM加载项 若找到Endote相关项,则打勾--确定若是这一_word没有endnote插件,要下载插件吗