资讯专栏INFORMATION COLUMN

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

whlong / 2525人阅读

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

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

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

一定有更好的办法……

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

根据官方示例的模型工厂代码

$factory->define(AppProduct::class, function (FakerGenerator $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(AppAddress::class, function () {
    $faker = FakerFactory::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,
    ];
});

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

调整后, FakerFactory::create("zh_CN") 也会返回一个 FakerGenerator, 但它是使用汉语初始化的。

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

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

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

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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/23177.html

相关文章

  • laravel入门

    摘要:开发根目录测试分为单元测试和功能测试创建一个文件执行测试测试前清除配置缓存运行单个测试用例小提示在开发与进行交互的第三方扩展包时,最好选择注入契约而不使用。 参考https://laravelacademy.org/ 概念 单词 契约Contract 就是接口 repository 仓库(封装数据访问,可以搜索:repository模式) Container 容器 ServicePr...

    韩冰 评论0 收藏0
  • 使用Tinker来调试Laravel应用程序的数据以及使用Tinker一些总结

    摘要:不过除了使用加密,还可以使用原文链接使用来调试应用程序的数据以及使用一些总结参考资料参考资料使用来调试你的参考资料框架填充中文数据测试数据 使用Tinker来调试Laravel应用程序的数据以及使用Tinker一些总结 [toc] 今天我们将讨论如何使用Laravel的一些鲜为人知的功能来快速读取Laravel应用程序中的数据。我们可以使用Laravel的手工内置php artisan...

    simon_chen 评论0 收藏0
  • Laravel 菜鸟晋级之路

    摘要:用也有三四个月了,虽然是兼职开发,但是使用的频率非常之高,毕竟是产品化的一个项目。第二阶段数据库和开发了比较多的功能之后,会发现需要大量的测试数据,这时候和就该大显身手了。 用Laravel也有三四个月了,虽然是兼职开发,但是使用的频率非常之高,毕竟是产品化的一个项目。在这期间,也踩了无数的坑,走了很多弯路,所以准备把最近的感悟记录下来,方便后来者。 第一阶段:简单的增删改查 这是最...

    YacaToy 评论0 收藏0
  • Laravel数据库迁移和填充(支持中文

    摘要:不仅如此,在线上部署的时候,也避免了手动导入数据库或手动修改数据结构的麻烦,数据迁移帮你方便的维护着数据结构。数据迁移假如我们需要一张学生表,我们不再使用原生语句去创建表。 写在前面 经常我们做项目都团队协作开发,每个人都在自己本地的数据库,如果你曾经出现过让同事手动在数据库结构中添加字段的情况,数据库迁移可以解决你这个问题。 不仅如此,在线上部署的时候,也避免了手动导入数据库或手动修...

    tyheist 评论0 收藏0
  • 【日常手记】之Laravel5.3

    摘要:个人网站最近刚写了一个手机在线播放的电影站使用日常手记更新使用的的查询作用域的本地作用域去自定义可复用的约束集合,方便链式调用什么是本地查询作用域本地作用域允许我们定义通用的约束集合以便在应用中复用。 关于作者 程序开发人员,不拘泥于语言与技术,目前主要从事PHP和前端开发,使用Laravel和VueJs,App端使用Apicloud混合式开发。合适和够用是最完美的追求。 个人网站:...

    kidsamong 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<