Laravel数据库迁移和填充(支持中文)

写在前面

经常我们做项目都团队协作开发,每个人都在自己本地的数据库,如果你曾经出现过让同事手动在数据库结构中添加字段的情况,数据库迁移可以解决你这个问题。

不仅如此,在线上部署的时候,也避免了手动导入数据库或手动修改数据结构的麻烦,数据迁移帮你方便的维护着数据结构。

数据填充,让我们测试的时候需要大量的假数据不再一条一条的去造数据,可以轻松的批量填充大量数据。

本文基于Laravel5.5,其他版本大同小异。

数据迁移

假如我们需要一张学生表,我们不再使用原生SQl语句去创建表。

创建迁移文件

前提是已经配置好了数据库连接信息

php artisan make:migration create_students_table

此命令会在database/migrations/目录生成类似2017_10_28_035802_create_students_table.php的文件

我们在里边添加students表的数据结构

<?phpuse Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;class CreateStudentsTable extends Migration
{/*** Run the migrations.** @return void*/public function up(){// students为表名称Schema::create('students', function (Blueprint $table) {// 存储引擎$table->engine = 'InnoDB';// id自增$table->increments('id');// 学生名称$table->string('name');// 性别$table->string('sex');// 邮箱$table->string('email');// 喜爱的颜色$table->string('favorite_color');// 手机号$table->string('phone');// 地址$table->string('addr');// 自动维护时间戳$table->timestamps();});}/*** Reverse the migrations.** @return void*/public function down(){Schema::dropIfExists('students');}
}

更多用法,请参考官方手册。

运行迁移
php artisan migrate

这样会运行database/migrations/目录的所有迁移文件,并自动创建migrations表,来记录已经运行过的迁移文件,防止重复运行。
我们看一下数据库是不是自动创建了students表了呢。

如果出现以下错误:

[Illuminate\Database\QueryException]
SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was t
oo long; max key length is 767 bytes (SQL: alter table users add unique users_email_unique(email))[PDOException]
SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was t
oo long; max key length is 767 bytes

在database/migrations/目录里会有laravel自带的用户和重置密码的两个迁移文件,会一并运行。
在这里我们这样解决,修改数据库配置文件config/database.php里的mysql下的字符集为utf8即可

'charset'     => 'utf8',
'collation'   => 'utf8_unicode_ci',

想知道为什么,可猛戳 https://segmentfault.com/a/11...

数据填充(支持中文)

创建学生表Eloquent模型

在app目录下创建Student.php

<?php
namespace App;use Illuminate\Database\Eloquent\Model;/*** 学生模型*/
class Student extends Model
{}
创建填充文件
php artisan make:seed StudentsTableSeeder

这条命令会在database/seeds/目录下生成StudentsTableSeeder.php填充文件

<?phpuse Illuminate\Database\Seeder;class StudentsTableSeeder extends Seeder
{/*** Run the database seeds.** @return void*/public function run(){// 调用模型工厂 生成10000条数据factory(App\Student::class, 10000)->create();}
}
调用该 Seeders

我们打开database/seeds/DatabaseSeeder.php文件,修改为

<?phpuse Illuminate\Database\Seeder;class DatabaseSeeder extends Seeder
{/*** Run the database seeds.** @return void*/public function run(){// 调用学生表填充文件$this->call(StudentsTableSeeder::class);}
}
创建 模型工厂 填充
php artisan make:factory StudentsFactory -m Student

此命令会在database/factories/目录下生成StudentsFactory.php文件,我们定义一下要填充的数据格式

<?phpuse Faker\Generator as Faker;/* @var Illuminate\Database\Eloquent\Factory $factory */$factory->define(App\Student::class, function (Faker $faker) {$sex = rand(1, 1000);return ['name'           => $faker->name,'sex'            => $sex % 2 == 0 ? '男' : '女','email'          => $faker->unique()->safeEmail,'favorite_color' => $faker->safeColorName,'phone'          => $faker->phoneNumber,'addr'           => $faker->address,];
});

更多配置请查阅 vendor/fzaninotto/faker/src/Faker/Generator.php文件

让faker填充中文

在app/Providers/AppServiceProvider.php的boot()中添加:

    public function boot(){// 填充中文数据$this->app->singleton(\Faker\Generator::class, function () {return \Faker\Factory::create('zh_CN');});}
开始填充

首先我们执行一下:

composer dump-autoload

自动加载一下我们在database/seeds/目录创建的填充文件,以避免出现以下错误:

[ReflectionException]
Class StudentsTableSeeder does not exist

接着我们运行填充命令:

php artisan db:seed

由于我们填充的是一万条数据,可以时间稍长,可以刷新数据库看着逐条增加的数据。

大功告成

如果以上操作都没有报错的话,来看一下我们的数据库表students表是否有数据了呢?

id | name | sex | email | favorite_color | phone | addr | created_at |updated_at
---|------|------|------|------|------|------|------|------|------|---
10000 |谈英 |男 |cum_et@example.com |白色 |17642207316 |贵阳海陵区 |2017-10-28 05:19:10 |2017-10-28 05:19:10
9999 |汤淑珍 |男 |qlaudantium@example.net |黑色 |18239453935 |南宁友好区 |2017-10-28 05:19:10 |2017-10-28 05:19:10
9998 |贾春梅 |男 |ea35@example.com |粟色 |17103645128 |长沙萧山区 |2017-10-28 05:19:10 |2017-10-28 05:19:10
9997 |季志明 |男 |cdeleniti@example.com |灰色 |17002359608 |天津花溪区 |2017-10-28 05:19:10 |2017-10-28 05:19:10
9996 |成燕 |男 |aspernatur.aut@example.com |黄色 |17181193397 |贵阳锡山区 2017-10-28 05:19:|10 |2017-10-28 05:19:10
9995 |米博 |男 |reprehenderit_autem@example.com |紫 |17187328893 |广州东丽区 |2017-10-28 05:19:10 |2017-10-28 05:19:10
9994 |兰淑兰 |女 |et_ea@example.com |绿色 |18592254358 |兰州经济开发新区 |2017-10-28 05:19:10 |2017-10-28 05:19:10
9993 |乐瑶 |女 |vel.vitae@example.org |藏青 |15891490007 |香港龙潭区 2017-10-28 05:19:|10 |2017-10-28 05:19:10
9992 |叶志新 |女 |lcumque@example.net |藏青 |15564391466 |北京高明区 |2017-10-28 05:19:10 |2017-10-28 05:19:10
9991 |胥杨 |男 |voluptatem00@example.com |黄色 |17097722096 |郑州新城区 |2017-10-28 05:19:10 |2017-10-28 05:19:10
9990 |凌敏 |女 |magni22@example.org |鲜绿色 |13021578051 |杭州涪城区 |2017-10-28 05:19:10 |2017-10-28 05:19:10
9989 |席建 |女 |fugiat_accusantium@example.net |紫 |18070573726 |南昌海陵区 |2017-10-28 05:19:10 |2017-10-28 05:19:10
9988 |聂新华 |女 |debitis_sapiente@example.com |水色 |17004061646 |成都南长区 |2017-10-28 05:19:10 |2017-10-28 05:19:10

……

原文 https://www.tech1024.cn/origi...

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/393509.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Django——认证系统(Day72)

阅读目录 COOKIE 与 SESSION 用户认证 COOKIE 与 SESSION 概念 cookie不属于http协议范围&#xff0c;由于http协议无法保持状态&#xff0c;但实际情况&#xff0c;我们却又需要“保持状态”&#xff0c;因此cookie就是在这样一个场景下诞生。 cookie的工作原理是&#xff1a;…

12-1 12 防盗链 访问控制 php解析 代理

2019独角兽企业重金招聘Python工程师标准>>> 12.13 Nginx防盗链 12.14 Nginx访问控制 12.15 Nginx解析php相关配置 12.16 Nginx代理 扩展 502问题汇总 http://ask.apelearn.com/question/9109location优先级 http://blog.lishiming.net/?p10012.13 Nginx防盗链 用来…

图片预览------photoswipe 使用

photoswipe 使用 预览图片后&#xff0c;需要点击关闭按钮才能关闭&#xff0c;点击图片事件效果是放大图片&#xff0c;和微信的效果不一致&#xff0c;最后改用微信预览图片的接口了&#xff0c;但是例子可以用&#xff0c;记录一下&#xff01;&#xff01; http://www.cnbl…

SSKeychain

Keychain 使用? ---为了实用最大化我觉得我应该直接先说使用&#xff01; 当然是使用第三方库啦&#xff1a;sskeychain 3000星星的库不开玩笑。github地址&#xff1a;https://github.com/soffes/sskeychain 导入完之后首先&#xff0c;编译一下有无错。 如果是自己手动导入&…

linux mysql提交_MySQL 事务提交过程

开发老大要求通过binlog查询一条被修改的数据&#xff0c;数据被查出后问我&#xff0c;有没有可能binlog中不会记录&#xff0c;回答不会&#xff0c;因为数据被修改&#xff0c;若失败直接回滚&#xff0c;不会在binlog中记录&#xff0c;此刻一个朋友用了洪荒之力告诉我&…

React单元测试:Jest + Enzyme(二)

前言 在上一篇教程中&#xff0c;我们成功搭建了基于Jest和Enzyme的单元测试框架并成功地跑起来第一个单元测试&#xff0c;可以点击这里回顾一下。今天&#xff0c;我们重点讨论如何通过Jest来mock数据。 什么是Mock Mock的简单翻译就是模拟。既可以模拟数据&#xff0c;也可以…

python dict hash算法_2020年3月26日python学习笔记——hash

什么是哈希&#xff1f;hash,一般翻译做散列、杂凑&#xff0c;或音译为哈希&#xff0c;是把任意长度的输入(又叫做预映射pre-image)通过散列算法变换成固定长度的输出&#xff0c;该输出就是散列值。这种转换是一种压缩映射&#xff0c;也就是&#xff0c;散列值的空间通常远…

数据处理不等式:Data Processing Inequality

我是在差分隐私下看到的&#xff0c;新解决方案的可用性肯定小于原有解决方案的可用性&#xff0c;也就是说信息的后续处理只会降低所拥有的信息量。 那么如果这么说的话为什么还要做特征工程呢&#xff0c;这是因为该不等式有一个巨大的前提就是数据处理方法无比的强大&#x…

gulp 实现sass自动化 ,监听同步

实现功能 监听scss文件   sass自动化 准备条件 1 .安装gulp npm init ---->一直enter&#xff0c;会在当前目录下生成一个package.json文件,记录安装的依赖模块 npm install gulp --save-dev 2 .安装gulp-ruby-sass npm install gulp-ruby-sass 你还需要安装ruby环境…

MSSQL → 02:数据库结构

一、数据库的组成 在SQL Server 2008中&#xff0c;用户如何访问及使用数据库&#xff0c;就需要正确了解数据库中所有对象及其设置。数据库就像一个容器&#xff0c;它里面除了存放着数据的表之外&#xff0c;还有视图、存储过程、触发器、约束等数据库对象。数据库管理的核心…

mySQL教程 第9章 触发器

第9章 触发器 入的新数据放到new表&#xff0c;删除的数据放到old表。 准备本章学习环境 连接数据库schoolDB&#xff0c;删除表TStudent&#xff0c;TScore和Tsubject中的所有数据。 delete from TStudent; delete from TScore; delete from TSubject; 向学生表插入两条记录 i…

掩码图制作photoshop__新手用

1.首先你得有一张图&#xff0c;比如这样的&#xff1a; 2.用PS打开他 3.左边工具栏里&#xff08;快速选择工具W&#xff09;&#xff0c;选想显示的部分 4.ctrlc复制一下&#xff0c;新建一张黑底图粘贴上去或者白底图时选中显示区即花瓣右键反向右键填充成黑色 5.菜单栏->…

Unity3D手机斗地主游戏开发实战(02)_叫地主功能实现

大体思路 前面我们实现了点击开始游戏按钮&#xff0c;系统依次给玩家发牌的逻辑和动画&#xff0c;并展示当前的手牌。这期我们继续实现接下来的功能--叫地主。 1.首先这两天&#xff0c;学习了DOTween&#xff0c;这是一个强大的Unity动画插件&#xff0c;大家可以参考&#…

Koa 中实现 chunked 数据传输

有关于 Transfer-Encoding:chunked 类型的响应&#xff0c;参见之前的文章HTTP 响应的分块传输。这里看 Koa 中如何实现。 Koa 中请求返回的处理 虽然官方文档有描述说明不建议直接调用 response.write&#xff1a; Bypassing Koas response handling is not supported. Avoid …

HTML5新特性之Mutation Observer

Mutation Observer&#xff08;变动观察器&#xff09;是监视DOM变动的接口。当DOM对象树发生任何变动时&#xff0c;Mutation Observer会得到通知。 要概念上&#xff0c;它很接近事件。可以理解为&#xff0c;当DOM发生变动会触发Mutation Observer事件。但是&#xff0c;它与…

Python操作MongoDB - 极简教程

2019独角兽企业重金招聘Python工程师标准>>> Python 连接 MongoDB 安装PyMongo模块 pip install pymongo使用MongoClient建立连接 from pymongo import MongoClient # 以下为三种建立连接的方式 #client MongoClient() #client MongoClient(localhost, 27017) #cl…

java 省市区三级联动_AJAX省市区三级联动下拉菜单(java版)

此小程序的功能主要是采用异步请求方式从数据库中调取省市区信息显示到下拉列表&#xff1a;代码如下&#xff1a;建立数据库中的代码和一些配置文件信息就省略了&#xff0c;主要有JavaScript中的代码为&#xff1a;$(document).ready(function(){$.get("getProvince.do&…

20155305乔磊2016-2017-2《Java程序设计》第四周学习总结

20155305乔磊2016-2017-2《Java程序设计》第四周学习总结 教材学习内容总结 继承 继承就是避免多个类间重复定义共同行为。面向对象中&#xff0c;子类继承父类&#xff0c;就是把程序中相同的代码部分提升为父类。extends关键字&#xff0c;表示前者会扩充后者的行为&#xff…

【eclipse转idea的第一天】配置idea

为什么80%的码农都做不了架构师&#xff1f;>>> 导入maven项目 设置maven(全局) 为了不然才转idea的码友们重复我犯过的错&#xff0c;我这儿截图步骤说明下&#xff1a; 这里是列表文本这里是列表文本idea的设置有两种&#xff1a;全局&#xff0c;局部(我这么叫的…

Vmware 安装虚拟工具 (二)

打开虚拟机&#xff0c;以root超级用户登陆&#xff0c;菜单栏选择虚拟机&#xff0c;install安装虚拟机 拷贝虚拟工具到 在根目录下建立文件夹&#xff0c;并将工具拷贝到该文件夹&#xff0c;例如vmtool 打开终端&#xff0c;进入该目录开始安装 如图&#xff0c;进入目录解压…