Laravel学习记录--数据填充
Laravel可以用seed
类为数据库填充测试数据。所有的seed
类被存放在database\seeds
目录下。你可以任意为seed
命名,但应该遵守类似UsersTableSeeder
的命名规范。Laravel默认定义的一个DatabaseSeeder
类,可以在这个类中使用call
方法来运行其他的seed
类,从而控制数据填充顺序
生成Seeder
使用命令 php artisan make:seeder MuserTableSeeder
一个seeder类只包含一个默认方法:run
。这个方法会在Atrisan命令db:seed
被执行时调用,在run
方法里你可以根据需要在数据库中插入数据,你也可以有查询构造器或模型工厂来手动插入数据
运行填充命令
php artisan db:seed
运行DatabaseSeeder类
php artisan db:seed --class=MuserTableSeeder
运行独立的填充类
有些时候你希望在运行迁移命令时填充测试数据,这可以通过不指定值的 --seed选项实现
php artisan migrate --seed
php artisan migrate:refresh --seed
第一条命令会在执行迁移命令时运行填充器类DatabaseSeeder填充数据,第二条命令用于回滚所有迁移并重新运行迁移的同时填充初始化数据。
注意 在数据填充期间,批量赋值保护会被自动禁用
编辑填充器
通过命令创建填充器后,我们需要编辑其run
方法设置要填充的数据,正如上面提到的可以使用查询构造器,也可使用模型工厂,这里我们先以查询构造器演示
1.设置Muser的填充器
<?phpuse Illuminate\Database\Seeder;
use Illuminate\Database\Eloquent\Model;
class MusersTableSeeder extends Seeder
{/*** Run the database seeds.** @return void*/public function run(){DB::table('musers')->insert(['uname' => str_random(10),'unick' => bcrypt('secret'),'country_id'=>mt_rand(30,90)]);}
}
2.DatabaseSeeder
的run
方法使用call
调用填充器
public function run(){$this->call(MusersTableSeeder::class);}
3.运行命令
php artisan db:seed
查看数据库
确实被填充了一条数据
使用模型工厂
每一次插入一条记录都要编写一条语句,或者手动插入数据是不是很麻烦?数据量小还好,如果数据量成千上万怎么办?显然上面的方法已经不能满足我们的需求,这里就出现了模型工厂,通过模型工厂可以自定义填充规则,自定义填充的记录数。
创建模型工厂
模型工厂存放在database/factories
目录下,Laravel自带了一个用于填充User
模型的模型工厂UserFactory
<?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\User::class, function (Faker $faker) {return ['name' => $faker->name,'email' => $faker->unique()->safeEmail,'password' => '$2y$10$TKh8H1.PfQx37YgCzwiKb.KjNyWgaHb9cbcoQgdIVFlYg7B77UdFm', // secret'remember_token' => str_random(10),];
});
在这个模型工厂中通过$factory->define
方法来定义User模型的模型工厂。该方法的第一个参数是模型类,第二个参数是一个匿名函数,在函数中通过Faker
类提供的方法来自定义字段规则,$faker->name
,生成用户名,$faker->unique()->safeEmail
生成唯一的邮箱,最后将这些字段返回(更多Faker的字段规则)
调用模型工厂
在seed类中调用模型工厂使用辅助函数factory()
指定模型类和填充次数,最后链式调用create()
方法即可
该函数第一个参数为使用模型类,为哪一个模型填充数据,第二个参数为填充的次数
简单案例
通过模型工厂填充我们的tests表
1.通过迁移文件创建tests表(表结构如下)
2.创建模型工厂
在database/factories
下创建一个关于Test
模型的模型工厂,命名规则为 驼峰法(模型名Factory
)
如这里我们创建的Test
Model的模型工厂那他的名称应该为TestFactory
<?phpuse Faker\Generator as Faker;/*$factory->define(App\Test::class, function (Faker $faker) {return ['Ip'=>$faker->ipv4,'name'=>$faker->name,'sex'=>$faker->randomElement($array = array('男','女')),//随机取性别'email'=>$faker->email,'phone'=>$faker->phoneNumber,'city'=>$faker->city,'company'=>$faker->randomElement($array = array('华为','小米','乐视','网易')),//随机取公司'con'=>$faker->realText];
});
3.调用模型工厂
在database/seeds/DatabaseSeeder
类的run
方法使用factory
调用对应的模型工厂
factory(模型类名,填充次数)
由于我们遵从了他的命名规则,当我们输入第一个参数模型类名时,Laravel会自动加载该模型的模型工厂
public function run(){factory(\App\Test::class,20)->create();}
4.运行填充命令,并查看数据库结果
php artisan db:seed
Laravel学习记录--数据填充相关推荐
- Laravel学习记录--访问器与修改器
简介 当你在Eloquent模型实例中获取或设置某些属性值的时候,访问器和修改器允许你对Eloquent属性值进行格式化,访问器可在将要读取的数据进行处理后在返回给调用方,而修改器可在数据要被保存到数 ...
- Laravel学习记录--LaravelDebugbar
laravel 调试工具 Debugbar 安装及使用 1.使用composer 安装 composer require barryvdh/laravel-debugbar 2.在app\Provid ...
- 【Laravel 】faker数据填充详解
安装 在laravel中已经自动集成,无需手动安装.如需在其他地方使用,可使用以下命令进行安装. composer require fzaninotto/faker 为Faker指定中文支持 可通过在 ...
- php对接小鹅通API开发高级实战案例解析:获取指定资源学习记录信息(单人单学习记录、单人多学习记录累计、返回数据格式确认)
获取指定资源学习记录信息 前言 一.获取指定资源学习记录信息请求方式及url 二.获取指定资源学习记录信息请求参数 请求参数 请求格式 三.单人单学习记录API封装函数 四.单人多学习记录API封装函 ...
- php数据迁移脚本,Laravel中数据迁移与数据填充的详细步骤
前言 这是一篇基础教程,对标 Laravel 文档中的数据迁移和数据填充,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍把. 关于Laravel数据库迁移的理解 最初看到laravel框 ...
- Laravel 实践之路: 数据库迁移与数据填充
数据库迁移实际上就是对数据库库表的结构变化做版本控制,之前对数据库库表结构做修改的方式比较原始,比如说对某张库表新增了一个字段,都是直接在库表中执行alter table xxx add .. 的方式 ...
- Laravel学习笔记4,文件上传,分页,验证码,数据表和迁移
目录 一.文件上传 二.数据分页 三.验证码 Return Image Return URL Return HTML 六.响应处理 一.文件上传 在laravel, 里面实现文件的上传是很简单的,压根 ...
- laravel mysql rand_laravel如何从mysql数据库中随机抽取n条数据(高性能) - Laravel学习网...
laravel如何高性能地从mysql数据库中随机获取n条数据,有时候我们常常会需要从数据库随机获取数据,比如:给工作人员随机分配10个订单,随机从数据库中随机抽查100个用户:这样我们就需要随机从数 ...
- 【C语言进阶深度学习记录】三十五 程序中的堆、栈以及静态存储区(数据区)
学习交流加 个人qq: 1126137994 个人微信: liu1126137994 学习交流资源分享qq群: 962535112 在我之前学习底层的知识的时候,也写过相关的内容.可以对比的学习:[软 ...
- MySQL学习记录 (三) ----- SQL数据定义语句(DDL)
相关文章: <MySQL学习记录 (一) ----- 有关数据库的基本概念和MySQL常用命令> <MySQL学习记录 (二) ----- SQL数据查询语句(DQL)> &l ...
最新文章
- 分布式事务开局第一篇,从数据库事务隔离级别说起
- 从浏览器多进程到JS单线程,JS运行机制最全面的一次梳理
- 中国银行业100强发布,头部名企为何选择永洪科技?
- C语言 函数递归例题解析
- 前端学习(1290):nodejs模块化的开发导出另一种方式
- 如何阅读一本书~阅读的层次
- 微信小程序 navigator 用来实现页面跳转功能
- java 同步异步_Java中的同步于异步
- 用python建云盘_实用的Python(3)超简单!基于Python搭建个人“云盘”
- 学生信息管理系统(c++源代码实现)
- delphi 获取数组长度_C++可变长的数组,老司机手把手教你实现!
- 计算机基础一级证exlse函数,原创—EXCEL自定义函数完成CPK/PPK/CP/PP/CPU/CPL等的计算...
- java c 语言之父_Java之父评价C语言之父:我用尽了形容词
- 代码检查技术Checkstyle与p3c调研
- 各行业赫芬达尔指数表(2013-2018年)
- PCB通孔类焊盘封装
- 关于hibernate检索策略
- SATA串口硬盘设置、分区及安装
- 阿里云部署SVN服务器
- 如何在Vue3中使用router