您的位置 首页 php

Laravel框架-数据填充(Seeder,Factory)实例分析

Laravel Database :Seeder

数据填充功能主要是指使用特殊规则,批量生成虚拟的数据库数据,用于实现对所开发的应用进行测试。如我们应用中存在用户信息表,需要填写测试1000名用户信息的存储及下一步业务操作使用,如果单独一条一条编写测试用的数据,所花费时间较长,成本较高。借助 Laravel 框架我们可以快速使用其提供的工具完成虚拟测试数据的批量生成与存储,本文结合实际教学需求,对数据填充进行详细说明与实例分析。


问题描述

本例问题需求来源于上一篇文章介绍的航空公司票务业务处理应用需求,在该项目案例中,客户可通过sreach页面实现对航班信息进行检索。页面设计及素材描述如下:

搜索页面设计样式

搜索页面设计样式如上图所示,为测试开发应用的航班搜索功能,需要提供航班基本信息,项目要求能够自动生成100条航班信息,具体要求描述如下:

  1. 在提供的城市之间随机产生100个不同的航班。不同的出发城市,目的地,航班时间和航班类型各不相同。
  2. 航班号不得超过6个字符。前两个是字母,其余四个是数字。自动生成的航班号的前2个字符应相同。
  3. 出发城市,目的地和飞行时间的相同航班号应相同。但是日期可能会有所不同。
  4. 不同的航班有不同的出发日期,但是最好将它们保留在数据库建立之前1天或5天之后进行测试。

解决措施、方法与步骤

该问题提出了需要使用Laravel提供的数据库工具、方法实现自动生成虚拟测试用记录,并对生成记录提出了具体要求即规则,因此我们可以使用Laravel提供的数据迁移与数据填充功能快速生成符合要求的记录,其中数据迁移主要用于实现表的创建,数据填充主要用于实现记录的生成。本例未给出飞行航班迁移文件,因此需要单独在 MySQL 中建立flights数据表用于实现记录的存储。并再此基础上生成虚拟记录。具体实现过程描述如下:

1、创建数据表

为完成任务,首先需要创建用于存储航班信息的数据库,本例创建数据表名为flights。注意给出的生成记录的条件,可以分析判断在创建表过程中注意的问题。如,主键如何设置、数据类型为长度的设置等。综合考虑以上因素创建如下结构数据表:

航班信息表flights

2、Eloquent模型的创建

Eloquent模型主要用于建立数据表与类之间的关系,简单理解我们要实现对flights表进行操作,需要首先建立表与程序的关联,让程序中的类知道需要操作哪一张表。在Laravel框架下需要在App文件夹下创建航班表对应的Eloquent模型,文件名字为Flights.php。代码如下:

Eloquent模型

按照Eloquent模型规则可知class名字Flights即我们需要操作的数据表。Eloquent 约定模型类映射表名是将类名由驼峰格式转化为小写+下划线(含多个单词的话),最后将其转化为复数形式。

3、定义Seeders填充器

seeder类主要用于实现为数据库中的表填充虚拟测试数据,Laravel中所有的seeds都存在在database下的seeds文件夹中,因此为实现将航班信息自动填写的数据表中,我们需要定义FlightTableSeeder类。可在应用原文件的Laravel对应目录下调用Artisan make:seeder生成seeder类。本地路径下我们的命令执行代码即路径如下:

D:\xampp\htdocs\laravel6>php artisan make:seed FlightsTableSeeder 

定义FlightTableSeeder

执行成功之后则会在指定路径中的文件夹中生成FlightTableSeeder.php文件,截图如下:

FlightTableSeeder.php文件

4、调用FlightTableSeeder填充器

定义完成填充器之后,下一步需要调用该填充器,Laravel默认提供了DatabaseSeeder类,在该类中通过使用call方法运行我们编写的FlightTableSeeder填充器,调用运行方法如下:

运行自定义seeder

5、使用模型工厂定义填充数据格式

在使用seeder进行数据填充时可以一条记录形式进行填充,结合本项目要求,我们需要批量生成符合条件的记录。因此我们采用模型工厂实现对数据格式进行定义,并借助factory方法实现向数据表中插入数据。模型工厂是一个class,本例文件名称为FlightsFactory.php。生成方法通过控制台执行以下命令:

生成模型工厂类

执行完成后会自动在database的factories文件夹下生成FlightsFactory.php文件,下一步则可在该文件中按照项目要求编写生成数据的格式。其编写代码如下:

模型工厂数据格式定义

模型工厂类中数据格式基本定义描述如上图,其中flight_no格式为6位,前两位字母,后四位数字。机型位300ER与A320两个中选择一个,时间为time,日期为当前日期前1天或者后5天。主要规则约束是通过Faker类实现,该类定义了各种约束规则的表达形式,部分规则如下所示:

Faker规则定义

6、执行填充与效果展示

完成以上步骤工作之后我们就可以使用Laravel提供的artisan方法实现数据的自动生成与填充。执行前可以使用 dump-autoload 命令重新生成 Composer 的自动加载器。然后再执行php artisan make:seed FlightsTableSeeder完成数据填充。代码如下:

dump-autoload 命令

php artisan make:seed FlightsTableSeeder

执行成功之后会给出绿色显示部分,seeding completed,填充成功,完成填充,下一步我们可以打开数据库检查是否完成指定格式的数据填充。数据库查询结果描述如下:

填充结果检查

检查结果表明,数据填充功能正常,批量生成了100条符合要求的数据记录,完成项目要求的各类约束,达到设计要求,满足设计目标。【本文由kid编程首发于今日头条】


本头条号长期关注编程资讯分享;编程课程、素材、代码分享及编程培训。如果您对以上方面有兴趣或代码错误、建议与意见,可以联系作者,共同探讨。期待大家关注!相关文章链接如下:

文章来源:智云一二三科技

文章标题:Laravel框架-数据填充(Seeder,Factory)实例分析

文章地址:https://www.zhihuclub.com/79691.shtml

关于作者: 智云科技

热门文章

网站地图