laravel使用Faker数据填充的实现方法


Posted in PHP onApril 12, 2019

导语

做开发的时候,添加测试数据是必不可少的,laravel 内置了很方便的数据填充,下面是实例。

注意:laravel5框架中已经内置了faker组建,不用安装

数据迁移

先创建数据模型和数据迁移 php artisan make:model Models/FakerUser -m;

只创建几个简单字段,编辑 database/migrations/{now_date}_create_faker_users_table.php 文件

/**
 * Run the migrations.
 *
 * @return void
 */
 public function up()
 {
 Schema::create('faker_users', function (Blueprint $table) {
  $table->increments('id');
  $table->char('name', 20)->comment('姓名');
  $table->string('email', 50)->comment('邮箱');
  $table->tinyInteger('age')->comment('年龄');
  $table->char('city', 20)->comment('城市');
  $table->timestamps();
 });

 DB::statement("ALTER TABLE `faker_users` comment'测试用户表'"); // 表注释
 }

运行数据迁移 php artisan migrate 之后数据表创建完成。

数据填充

  1. 创建数据填充文件 php artisan make:seeder FakerUsersSeeder;
  2. 创建完成后,我们可以在 run() 方法中手动添加几条测试数据。但是好的办法,是使用模型工厂,接下来把注意力转移到模型工厂中;
  3. 创建模型工厂 php artisan make:factory FakerUsersFactory;
  4. 在模型工厂中,可以通过 Faker\Generator 来生成测试数据,编辑 database/factories/FakerUsersFactory.php
<?php

use Faker\Generator as Faker;

$factory->define(\App\Models\FakerUser::class, function (Faker $faker) {
 return [
 'name' => $faker->name,
 'email' => $faker->safeEmail,
 'age' => $faker->numberBetween(8, 80),// 数字在 8-80 之间随机
 'city' => $faker->city,
 'created_at' => $faker->dateTimeBetween('-3 year', '-1 year'),// 时间在 三年到一年 之间
 'updated_at' => $faker->dateTimeBetween('-1 year', '-5 month'),// 时间在 一年到五个月之间
 ];
});

由上述代码可以很直白的看出 Faker\Generator 的作用。它可以生成的数据类型有很多,更多的类型可以看下官方文档,虽然是英文的,不过都有示例,简单易懂;

  1. Faker 生成的数据默认是英文,可以在 config/app.php 中将 faker_locale 设置为 zh_CN;
  2. 模型工厂写好了,接下来就是调用。目光回到数据填充文件 database/seeds/FakerUsersSeeder.php,在 run() 方法中如下代码
/**
 * Run the database seeds.
 *
 * @return void
 */
 public function run()
 {
 factory(\App\Models\FakerUser::class)->times(1000)->make()->each(function ($model) {
  // 数据入库
  $model->save();
 });
 }

time() 是生成的次数,make() 方法是创建模型实例,在 each() 方法中将生成的模型实例入库保存。

  1. 最后就是执行数据填充,composer dump-autoload 之后 php artisan db:seed --class=FakerUsersSeeder

测试

好了,看下数据库的数据是否生成正确。看下总数

laravel使用Faker数据填充的实现方法

总数没有问题,随机看十条数据

laravel使用Faker数据填充的实现方法

数据也是正确的。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。

PHP 相关文章推荐
dedecms系统常用术语汇总
Apr 03 PHP
php自动跳转中英文页面
Jul 29 PHP
PHP CLI模式下的多进程应用分析
Jun 03 PHP
PHP 清空varnish 缓存的详解(包括指定站点下的)
Jun 20 PHP
php仿QQ验证码的实例分析
Jul 01 PHP
PHP获取服务器端信息的方法
Nov 28 PHP
PHP使用JSON和将json还原成数组
Feb 12 PHP
浅谈json_encode用法
Mar 05 PHP
php单例模式的简单实现方法
Jun 10 PHP
php PDO异常处理详解
Nov 20 PHP
PHP执行普通shell命令流程解析
Aug 24 PHP
PHP7 其他修改
Mar 09 PHP
Laravel5.7 Eloquent ORM快速入门详解
Apr 12 #PHP
laravel 数据迁移与 Eloquent ORM的实现方法
Apr 12 #PHP
PHP中的Iterator迭代对象属性详解
Apr 12 #PHP
PHP中str_split()函数的用法讲解
Apr 11 #PHP
PHP远程连接oracle数据库操作实现方法图文详解
Apr 11 #PHP
ThinkPHP5.0框架使用build 自动生成模块操作示例
Apr 11 #PHP
PHP生成随机码的思路与方法实例探索
Apr 11 #PHP
You might like
PHP 伪静态隐藏传递参数名的四种方法
2010/02/22 PHP
php无限分类使用concat如何实现
2015/11/05 PHP
详解PHP实现异步调用的4种方法
2016/03/14 PHP
form表单只提交数据而不进行页面跳转的解决方案
2013/09/18 Javascript
nodejs开发环境配置与使用
2014/11/17 NodeJs
JavaScript前补零操作实例
2015/03/11 Javascript
js实现表格筛选功能
2017/01/18 Javascript
JS去除字符串中空格的方法
2017/02/14 Javascript
BootStrap注意事项小结(五)表单
2017/03/10 Javascript
使用JavaScriptCore实现OC和JS交互详解
2017/03/28 Javascript
vue子父组件通信的实现代码
2017/07/09 Javascript
react native与webview通信的示例代码
2017/09/25 Javascript
javascript input输入框模糊提示功能的实现
2017/09/25 Javascript
javascript高级模块化require.js的具体使用方法
2017/10/31 Javascript
vue-cli开发环境实现跨域请求的方法
2018/04/07 Javascript
vue 中使用print.js导出pdf操作
2020/11/13 Javascript
[31:33]2014 DOTA2国际邀请赛中国区预选赛 TongFu VS DT 第一场
2014/05/23 DOTA
玩转python爬虫之爬取糗事百科段子
2016/02/17 Python
Python设计足球联赛赛程表程序的思路与简单实现示例
2016/06/28 Python
python实现BackPropagation算法
2017/12/14 Python
Tornado 多进程实现分析详解
2018/01/12 Python
解决python3 Pycharm上连接数据库时报错的问题
2018/12/03 Python
python 实现图片旋转 上下左右 180度旋转的示例
2019/01/24 Python
python实现WebSocket服务端过程解析
2019/10/18 Python
python对execl 处理操作代码
2020/06/22 Python
Python实现删除某列中含有空值的行的示例代码
2020/07/20 Python
美国知名户外用品畅销中心:Sierra Trading Post
2016/07/19 全球购物
请用用Java代码写一个堆栈
2012/01/26 面试题
类、抽象类、接口的差异
2016/06/13 面试题
在浏览器端如何得到服务器端响应的XML数据
2012/11/24 面试题
初中生物教学反思
2014/01/10 职场文书
公司租房协议书
2014/10/14 职场文书
2014七年级班主任工作总结
2014/12/05 职场文书
2015欢度元旦标语口号
2014/12/09 职场文书
vue+elementui 实现新增和修改共用一个弹框的完整代码
2021/06/08 Vue.js
Win10服务全部禁用了怎么启动?Win10服务全部禁用解决方法
2022/09/23 数码科技