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程序
Oct 09 PHP
mysql4.1以上版本连接时出现Client does not support authentication protocol问题解决办法
Mar 15 PHP
Ajax+PHP 边学边练 之二 实例
Nov 24 PHP
php 生成静态页面的办法与实现代码详细版
Feb 15 PHP
php学习笔记 php中面向对象三大特性之一[封装性]的应用
Jun 13 PHP
PHP获取ip对应地区和使用网络类型的方法
Mar 11 PHP
orm获取关联表里的属性值
Apr 17 PHP
php微信开发接入
Aug 27 PHP
Zend Framework入门教程之Zend_Db数据库操作详解
Dec 08 PHP
PHP实现图片压缩
Sep 09 PHP
PHP中用Trait封装单例模式的实现
Dec 18 PHP
php实现简单四则运算器
Nov 29 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排序之二维数组的按照字母排序实现代码
2011/08/13 PHP
Php header()函数语法及使用代码
2013/11/04 PHP
PHP学习笔记(二) 了解PHP的基本语法以及目录结构
2014/08/04 PHP
PHP获取表单所有复选框的值的方法
2014/08/28 PHP
PHP基于单例模式实现的数据库操作基类
2016/01/15 PHP
php如何控制用户对图片的访问 PHP禁止图片盗链
2016/03/25 PHP
PHP使用SOAP扩展实现WebService的方法
2016/04/01 PHP
phpStudy中升级MySQL版本到5.7.17的方法步骤
2017/08/03 PHP
PHP实现的堆排序算法详解
2017/08/17 PHP
jquery tools之tabs 选项卡/页签
2009/07/25 Javascript
iframe子父页面调用js函数示例
2013/11/07 Javascript
基于JavaScript实现活动倒计时效果
2017/04/20 Javascript
springMVC + easyui + $.ajaxFileUpload实现文件上传注意事项
2017/04/23 Javascript
深入理解node.js之path模块
2017/05/03 Javascript
微信页面弹出键盘后iframe内容变空白的解决方案
2017/09/20 Javascript
React-intl 实现多语言的示例代码
2017/11/03 Javascript
js 实现复选框只能选择一项的示例代码
2018/01/23 Javascript
在小程序中使用Echart图表的示例代码
2018/08/02 Javascript
使用apifm-wxapi快速开发小程序过程详解
2019/08/05 Javascript
node.js express框架实现文件上传与下载功能实例详解
2019/10/15 Javascript
基于html+css+js实现简易计算器代码实例
2020/02/28 Javascript
解决Antd Table表头加Icon和气泡提示的坑
2020/11/17 Javascript
[48:23]DOTA2上海特级锦标赛主赛事日 - 4 败者组第四轮#1COL VS EG第一局
2016/03/05 DOTA
python解析发往本机的数据包示例 (解析数据包)
2014/01/16 Python
python 编码规范整理
2018/05/05 Python
浅析Python函数式编程
2018/10/06 Python
Python实现登陆文件验证方法
2018/10/06 Python
Python装饰器用法实例分析
2019/01/14 Python
解决django后台样式丢失,css资源加载失败的问题
2019/06/11 Python
英国网上购买门:Direct Doors
2018/06/07 全球购物
小学生新学期寄语
2014/01/19 职场文书
出纳工作检讨书
2014/10/18 职场文书
2016年教师师德师风心得体会
2016/01/12 职场文书
房屋转让协议书(标准范本)
2016/03/21 职场文书
MySQL对数据表已有表进行分区表的实现
2021/11/01 MySQL
Python中使用tkFileDialog实现文件选择、保存和路径选择
2022/05/20 Python