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 相关文章推荐
社区(php&amp;&amp;mysql)一
Oct 09 PHP
初次接触php抽象工厂模式(Elgg)
Mar 21 PHP
php数组函数序列之next() - 移动数组内部指针到下一个元素的位置,并返回该元素值
Oct 31 PHP
php生成EAN_13标准条形码实例
Nov 13 PHP
PHP curl 获取响应的状态码的方法
Jan 13 PHP
PHP实现的简单三角形、矩形周长面积计算器分享
Nov 18 PHP
CodeIgniter多语言实现方法详解
Jan 20 PHP
浅谈PHP中的错误处理和异常处理
Feb 04 PHP
Laravel中Facade的加载过程与原理详解
Sep 22 PHP
PHP自动载入类文件函数__autoload的使用方法
Mar 25 PHP
thinkphp框架实现路由重定义简化url访问地址的方法分析
Apr 04 PHP
PHP中->和=>的意思
Mar 31 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里得到前天和昨天的日期的代码
2007/08/16 PHP
PHP+MySQL删除操作实例
2015/01/21 PHP
PHP+jQuery翻板抽奖功能实现
2015/10/19 PHP
PHP输入流php://input实例讲解
2015/12/22 PHP
基于Laravel实现的用户动态模块开发
2017/09/21 PHP
PHP Redis扩展无法加载的问题解决方法
2019/08/22 PHP
ThinkPHP5.1+Ajax实现的无刷新分页功能示例
2020/02/10 PHP
TNC vs IO BO3 第二场2.13
2021/03/10 DOTA
关于__defineGetter__ 和__defineSetter__的说明
2007/05/12 Javascript
jquery插件 autoComboBox 下拉框
2010/12/22 Javascript
js图片延迟加载的实现方法及思路
2013/07/22 Javascript
js使浏览器窗口最大化实现代码(适用于IE)
2013/08/07 Javascript
删除条目时弹出的确认对话框
2014/06/05 Javascript
分享一款基于jQuery的视频播放插件
2014/10/09 Javascript
js随机生成一个验证码
2017/06/01 Javascript
react-native-fs实现文件下载、文本存储的示例代码
2017/09/22 Javascript
NodeJS 将文件夹按照存放路径变成一个对应的JSON的方法
2018/10/17 NodeJs
Vue指令指令大全
2019/02/09 Javascript
原生js实现点击轮播切换图片
2020/02/11 Javascript
vue中改变滚动条样式的方法
2020/03/03 Javascript
vue开发简单上传图片功能
2020/06/30 Javascript
JavaScript实现烟花绽放动画效果
2020/08/04 Javascript
[03:49]2016完美“圣”典风云人物:AMS专访
2016/12/06 DOTA
[49:08]Secret vs VP 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
python3读取csv和xlsx文件的实例
2018/06/22 Python
对Django中内置的User模型实例详解
2019/08/16 Python
将tensorflow.Variable中的某些元素取出组成一个新的矩阵示例
2020/01/04 Python
Python 剪绳子的多种思路实现(动态规划和贪心)
2020/02/24 Python
Tensorflow加载Vgg预训练模型操作
2020/05/26 Python
Django filter动态过滤与排序实现过程解析
2020/11/26 Python
中国最大的潮流商品购物网站:YOHO!BUY有货
2017/01/07 全球购物
办公室驾驶员岗位职责
2013/11/15 职场文书
致跳远、跳高运动员广播稿
2014/01/09 职场文书
中学运动会广播稿
2014/01/19 职场文书
社区安全温馨提示语
2015/07/14 职场文书
Java基础——Map集合
2022/04/01 Java/Android