使用 Laravel 数据填充功能生成中文测试数据

今晚……不对,是昨晚,折腾一个的小项目,发现自动填充的中文数据显示起来总不太美观,于是开始琢磨如何填充中文数据进行测试。

然而一番搜索后惊奇的发现,官方、以及一些非官方的文档均未提及这一功能。期间看到一篇他人的“经验”文章,虽然可以实现这一需求,却要求修改 vendor 目录下 fzaninotto/Faker 包的源码,对于一个中了 Laravel 的“优雅之毒”的人来说,怎能容忍如此风骚的操作?

一定有更好的办法……

继续理清 Laravel 模型工厂原理之后,终于有所进展。发现其实只需要一个小小的修改就可以实现这一功能。

  • 根据官方示例的模型工厂代码
$factory->define(App\Product::class, function (Faker\Generator $faker) {
    return [
        ‘user_id‘ => 1,
        ‘name‘ => $faker->name,
        ‘mobile‘ => $faker->phoneNumber,
        ‘province‘ => $faker->state,
        ‘city‘ => $faker->city,
        ‘area‘ => $faker->area,
        ‘address‘ => $faker->streetAddress,
        ‘postcode‘ => $faker->postcode,
    ];
});
  • 调整后的代码
$factory->define(App\Address::class, function () {
    $faker = Faker\Factory::create(‘zh_CN‘);

    return [
        ‘user_id‘ => 1,
        ‘name‘ => $faker->name,
        ‘mobile‘ => $faker->phoneNumber,
        ‘province‘ => $faker->state,
        ‘city‘ => $faker->city,
        ‘area‘ => $faker->area,
        ‘address‘ => $faker->streetAddress,
        ‘postcode‘ => $faker->postcode,
    ];
});

调整前,使用依赖注入的 Faker\Generator 是使用的默认语言,即英文。

调整后, Faker\Factory::create(‘zh_CN‘) 也会返回一个 Faker\Generator, 但它是使用汉语初始化的。

事实上 Faker 本地化对于中文的支持仍有部分待完善,使用暂时不支持生成随机中文句子或者段落(相应的方法返回的仍然会是英文的),但我相信不久之后会有大牛实现这一些功能。

最后,上图,实际生成数据效果如下:

请别纠结省市区从属关系,数据仅供测试而已 

评论中大牛提醒后发现, Laravel5.4 及更新版本其实已经考虑了这一问题,并设置了相关的配置项 app.faker_locale,只不过在文档和默认的配置文件中看不到这一参数。相关源码在 Illuminate\Database\DatabaseServiceProvider 类中,可以查看源码来判断是否支持这一配置项。对于支持的版本,只需要在 config\app.php 文件中加入 faker_locale => ‘zh_CN‘ 就可以实现了

原文地址:https://www.cnblogs.com/winyh/p/8509395.html

时间: 2024-10-16 20:58:33

使用 Laravel 数据填充功能生成中文测试数据的相关文章

使用faker 生成中文测试数据

https://github.com/fzaninotto/Faker/blob/master/src/Faker/Provider/zh_CN/Address.php 常用的类型都在里面. 下面是一个实例.使用了laravel 框架的工厂模式向数据库填充测试数据. $factory->define(App\Models\Customer::class, function ($faker) { $faker = Faker\Factory::create('zh_CN'); return [  

laravel 数据填充

编写填充器 php artisan make:seeder UserTableSeeder 修改Laravel安装时自带的DatabaseSeeder类,添加一个数据库插入语句到run方法: <?php use DB; use Illuminate\Database\Seeder; use Illuminate\Database\Eloquent\Model; class DatabaseSeeder extends Seeder{ /** * 运行数据库填充 * * @return void

laravel框架之数据迁移和数据填充

一.数据迁移 1.创建一个迁移 1>使用artisan命令make:migration来创建一个新的迁移: php artisan make:migration create_sutdents_table 新的迁移位于database/migrations目录下,每个迁移文件名都包含时间戳从而允许Laravel判断其顺序. 2>其他一些选项 --table用来指定表名 php artisan make:migration create_students_table --table=studen

迷你MVVM框架 avalonjs 学习教程4、数据填充

MVVM是前端的究极解决方案,你们可能用过jQuery,但那个写的代码不易维护:你们可以听过说requirejs与seajs,传说中的模块开发,加载器,但它们的最终目标是打包:你们可能听过underscope,那是一个工具集:你们可以听说过ejs,Mustache.HandlebarsJS等模板引擎,它们是用来替代字符串拼接--凡此种种,它们在我们的业务开发中只是很少的部分,带来的帮助也很有限.前端开发,贯彻始终的是如何将后端的数据显示出来,将用户的输入格式化送到后端,都离不开DOM操作,而DO

Laravel 5.2 数据库迁移和数据填充

一.数据库迁移 Laravel 的数据库迁移提供了对数据库.表.字段.索引的一系列相关操作. 1. 创建迁移 使用 Artisan 命令  php artisan make:migration create_links_table 这将在 database/migrations 目录下生成一个名为 2017_05_06_151645_create_links_table.php 的友情链接迁移类.其中,名字的前半段 "2017_05_06_151645_" 是 Laravel 增加的时

laravel模型建立和数据迁移和数据填充(数据填充没有成功)未完

开始创建我们的第一个 Article 模型及其对应迁移文件了,我们在项目根目录运行如下 Artisan 命令一步到位: php artisan make:model Article -m -m 是 --migration 的缩写,告知 Artisan 在创建模型同时创建与之对应的迁移文件(我使用的是 Laradock 作为开发环境): 当然,还需要编辑默认生成的迁移文件: use Illuminate\Support\Facades\Schema; use Illuminate\Database

laravel中的数据迁移和数据填充

laravel中的数据迁移和数据填充 标签(空格分隔): php 生成迁移文件两种方式: 1 新建一个表的迁移文件 php artisan make:migration create_students_table --create=students 2 创建模型的时候同时创建迁移文件 php artisan make:model Model\Article -m 创建迁移文件和执行 1 在 up 方法里完成数据表字段的创建 2 执行命令 php artisan migrate 生成填充文件 ph

jQuery.fill 数据填充插件

博客园的伙伴们,大家好,I'm here,前段时间特别的忙,只有零星分散的时间碎片,有时候用来发呆,有时候用来写代码,正如下面给大家介绍的这个jQuery.fill插件,正是在这样的状态下写出来的. 主要功能 一直想要一个能解决前端拼接html代码的jQuery插件,但在网上搜来搜去都没找到满意的结果.还是老毛说的对,自己动手丰衣足食啊,设计的思路是通过在页面上排出模板,然后通过脚本向其填充数据,页面上的脚本不再关心版面的布局和样式,只关心数据,将数据从UI中分离出来,其主要的功能有:1.对DO

laravel5.4 关于数据填充的知识

需求:大量excel表格数据 集中整理到一个规定数据表中,并且增加新字段做标记步骤:把需要整理的excel表格提前存放到mysql数据库指定的表中 ,可以用图形化工具来执行! 核心:利用laravel5.4 框架自带的填充功能, 填充类都位于 database/seeds 具体可看文档操作 基于以上需求:直接上代码<?php use Illuminate\Database\Seeder; class DatabaseSeeder extends Seeder{/** Run the databa