laravel5.5数据库之数据填充(实践)
前要:laravel5.5数据库迁移可以参考我的上一篇博文:laravel5.5数据库迁移入门实践
一、背景
常常在做项目的过程中,会使用很多的测试数据,而因为团队开发,如果每个人的测试数据都不一致,会出现各种测试问题,所以有必要对数据库中的测试数据也进行开发过程中的版本控制。
填充和迁移类似,都是通过类似于迁移文件一样的填充文件来保存数据和执行填充操作。
填充数据有两种方式,编写seeder填充数据 和 使用模型工厂填充数据。
二、编写seeder填充数据
1. 进入dos系统,跳转到项目根目录,运行 工具(artisan)命令 make:seeder
来生成 Seeder,命令如下:
php artisan make:seeder GoodsTableSeeder
执行结果如下:
由框架生成的 seeders 都将被放置在 /database/seeds
目录下:
文件内容如下:
<?phpuse Illuminate\Database\Seeder;class GoodsTableSeeder extends Seeder
{/*** Run the database seeds.** @return void*/public function run(){//}
}
文件说明:一个seeder文件只包含一个run方法,这个方法会在dos系统中执行 db:seed 命令时被调用执行,在run方法中可以写入要插入的数据。
2. 编写run方法,写入待插入数据
public function run(){DB::table('goods')->insert(['goods_name' => '电动牙刷','goods_price'=> '120.23','num' => '30','descr' => '这是一条测试数据',]);}
3. 执行插入数据命令
进入dos系统,执行插入数据命令之前,可能需要重新生成Composer自动加载器,命令如下:
composer dump-autoload
执行插入数据命令
php artisan db:seed --class=GoodsTableSeeder
dos结果如下:
数据库结果如下:
三、使用模型工厂填充数据
在进行数据测试时,有时候需要批量生成数据,单个填充显然不太方便,这时候有需要使用模型工厂填充数据。
1. 生成goods模型文件
为了方便文件统一管理,我们统一把模型文件放在/app/Models/文件夹下,这时候更改一下/config/auth.php下的配置,更改如下:
'providers' => ['users' => ['driver' => 'eloquent','model' => App\Models\User::class, // 此处更改为App\Models\User],// 'users' => [// 'driver' => 'database',// 'table' => 'users',// ],],
注意:因为laravel5.5默认在app文件夹下有一个的User模型文件,所以更改了配置后,如果有需要,可以再重新生成一个User模型文件在Models中。
在dos系统中,跳转到项目根目录,执行命令开始生成goods模型文件,命令如下:
php artisan make:model Models\Goods
2. 在工厂模型文件(/database/factories/ModelFactory.php)中,对指定的字段进行赋值,代码如下:
<?phpuse Faker\Generator as Faker;/*
|--------------------------------------------------------------------------
| Model Factories
|--------------------------------------------------------------------------
|
| This directory should contain each of the model factory definitions for
| your application. Factories provide a convenient way to generate new
| model instances for testing / seeding your application's database.
|
*/
$factory->define(\App\Models\Goods::class, function (\Faker\Generator $faker) {return ['goods_name' => $faker->name, 'goods_price' => $faker->numberBetween(100,3000),'num' => $faker->numberBetween(20,50),'descr' => $faker->text,];
});
说明:$fake 实例能够调用的属性,也就是可以生成的数据内容,并非由用户自定义,如 $fake->name 随机生成一个名字,$fake->text 随机生成一个文本,具体的细节,参考github上 PHP library Faker的Formatters部分,地址:https://github.com/fzaninotto/Faker#formatters
3. 生成goods对应的seeder文件
进入dos系统,跳转到项目根目录,执行如下命令:
php artisan make:seed GoodsTableSeeder
执行成功后,查看/database/seeds/文件夹下多出GoodsTableSeeder.php
4. 在GoodsTableSeeder.php文件总的run方法写入生成测试数据的代码,代码如下:
<?phpuse Illuminate\Database\Seeder;class GoodsTableSeeder extends Seeder
{/*** Run the database seeds.** @return void*/public function run(){// 添加单条数据// DB::table('goods')->insert([// 'goods_name' => '电动牙刷',// 'goods_price' => '120.23',// 'num' => '30',// 'descr' => '这是一条测试数据',// ]);// 添加10条测试数据$goods = factory(\App\Models\Goods::class,10)->make(); \App\Models\Goods::insert( $goods->toArray() );}
}
注意:上面代码中添加单条数据是之前编写seeder填充数据时写入的,如果打开这个注释,注释掉批量添加的代码,同样可以重复添加这一条数据。
5. 在/database/seeds/DatabaseSeeder.php 里面调用GoodsSeeder.php的类,代码如下:
<?phpuse Illuminate\Database\Seeder;class DatabaseSeeder extends Seeder
{/*** Run the database seeds.** @return void*/public function run(){// $this->call(UsersTableSeeder::class);$this->call([GoodsTableSeeder::class,// UsersTableSeeder::class,]);}
}
6. 执行批量生成数据的命令
进入dos系统,跳转至项目根目录,执行以下命令:
php artisan db:seed
ok,批量填充数据也搞定!
结语:数据填充操作主要是用于开发阶段进行数据版本控制和批量产生测试数据的作用,真正到开始运营项目后,这个就不能用了,否则几十万的数据存储在项目文件里面,那就真的是开玩笑了……
如果看博文有什么疑惑的地方,欢迎留言告知!
laravel5.5数据库之数据填充(实践)相关推荐
- 怎么把MySQL的数据传入JTable,如何直接从数据库中将数据填充到Jtable
I have display the Jtable depends on the particular column from database and final two column in my ...
- laravel5.6 数据库获取数据模式变为’数组‘
在laravel配置中搜索 protected $fetchMode 然后改成 protected $fetchMode = PDO::FETCH_ASSOC;
- Laravel 实践之路: 数据库迁移与数据填充
数据库迁移实际上就是对数据库库表的结构变化做版本控制,之前对数据库库表结构做修改的方式比较原始,比如说对某张库表新增了一个字段,都是直接在库表中执行alter table xxx add .. 的方式 ...
- python 数据库表结构转为类_Python数据科学实践 | 数据库1
大家好,基于Python的数据科学实践课程又到来了,大家尽情学习吧.本期内容主要由智亿同学与政委联合推出. 数据库永远是数据管理上最值得使用的工具.而把所收集的大量数据放入数据库之后再处理是数据科学实 ...
- 大数据基础教程丨TiDB数据库从入门到实践
TiDB 是一款定位于联机事务处理/联机分析处理( HTAP: Hybrid Transactional/Analytical Processing)的融合型数据库产品,实现了一键水平伸缩,强一致性的 ...
- 【超详细】如何从数据库取出数据,动态填充html
目录 [超详细]如何从数据库取出数据,动态填充html step1:Javascript step2:php [超详细]如何从数据库取出数据,动态填充html step1:Javascript 首先你 ...
- 大数据、分布式、中台、云原生数据库架构设计与实践 | DAMS 2020
5年前,大数据浪潮的来袭唤起了国内企业对数据作为核心资产的新认知,为了推动国内数据管理加速发展,DAMS中国数据智能管理峰会携手产学研各界权威力量开启了对企业数字化转型的探索与助力. 5年后,我们看到 ...
- Laravel数据库迁移和填充(支持中文)
写在前面 经常我们做项目都团队协作开发,每个人都在自己本地的数据库,如果你曾经出现过让同事手动在数据库结构中添加字段的情况,数据库迁移可以解决你这个问题. 不仅如此,在线上部署的时候,也避免了手动导入 ...
- php 同时导出两个文件_使用orangehill/iseed自动反向生成数据填充文件
问题描述:最近在学习laravel 需要用到数据反向保存到代码中 百度了好久 找到了orangehill/iseed 插件,网上的博客都是5.4以下版本的介绍,我用的则是laravel5.8 貌似不可 ...
- 自动填充参数_使用orangehill/iseed自动反向生成数据填充文件
问题描述:最近在学习laravel 需要用到数据反向保存到代码中 百度了好久 找到了orangehill/iseed 插件,网上的博客都是5.4以下版本的介绍,我用的则是laravel5.8 貌似不可 ...
最新文章
- Go 学习笔记(80)— Go 标准库 container/list(单链表、双链表)
- ListView position
- 关于在centos下安装python3.7.0以上版本时报错ModuleNotFoundError No module named _ctypes 的解决办法
- 漫谈数据仓库之维度建模
- 矩形波傅里叶变换对以及三角波傅里叶变换
- 用Bi-GRU+Attention和字向量做端到端的中文关系抽取
- 性能测试--jmeter中XPath断言【10】
- 威纶触摸屏与电脑连接_威纶通TK6070IP触摸屏下载线MT6071IE触摸屏编程线连接电脑USB线...
- 架构思维成长系列教程(十)- 电商搜索引擎架构设计
- linux漏洞抓鸡,风靡全球的Ms08-067漏洞抓鸡大曝光
- 世界各国国家代码简称
- 炸!撩下 OLAP 数据分析的黑马神器 ClickHouse
- winxp升级win7教程_PR CC 2015下载和安装教程
- uniapp动态图片加载不出来
- SDN软件定义网络 学习笔记(4)--数据平面
- 我自己制作的导航页网站,源码免费分享~
- 在StarRocks中建立ClickHouseJDBC外表
- 相册计算机软件,电脑相册制作软件免费版,windows自带安全又免费相册制作软件...
- 中原建业冲刺上市的喜与忧:外拓小有成就,增长却逐渐放缓
- 方程式工具包Linux,NSA工具包验证之SMB漏洞利用
热门文章
- C#简单实现office转pdf、pdf转图片
- wamp的Laravel项目的Apache虚拟主机域名绑定和端口修改(实用)
- JAVA中数字转大写字母_java实现数字转大写
- 邮件群发系统 php,QQ邮箱群发PHP源码
- 超哇塞的 SpringBoot性能优化长文
- Notepad++取消去除文字下面的红色波浪线
- 【影音基础】深度解析什么是HDR高动态范围?
- 网页转圈打不开服务器,打不开网页怎么回事
- ai钢笔工具怎么描线_AI分享:歪龙教你玩转钢笔工具
- Linux部署单体架构,从单体式架构迁移到微服务架构:三个策略叙述