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.DatabaseSeederrun方法使用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
如这里我们创建的TestModel的模型工厂那他的名称应该为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学习记录--数据填充相关推荐

  1. Laravel学习记录--访问器与修改器

    简介 当你在Eloquent模型实例中获取或设置某些属性值的时候,访问器和修改器允许你对Eloquent属性值进行格式化,访问器可在将要读取的数据进行处理后在返回给调用方,而修改器可在数据要被保存到数 ...

  2. Laravel学习记录--LaravelDebugbar

    laravel 调试工具 Debugbar 安装及使用 1.使用composer 安装 composer require barryvdh/laravel-debugbar 2.在app\Provid ...

  3. 【Laravel 】faker数据填充详解

    安装 在laravel中已经自动集成,无需手动安装.如需在其他地方使用,可使用以下命令进行安装. composer require fzaninotto/faker 为Faker指定中文支持 可通过在 ...

  4. php对接小鹅通API开发高级实战案例解析:获取指定资源学习记录信息(单人单学习记录、单人多学习记录累计、返回数据格式确认)

    获取指定资源学习记录信息 前言 一.获取指定资源学习记录信息请求方式及url 二.获取指定资源学习记录信息请求参数 请求参数 请求格式 三.单人单学习记录API封装函数 四.单人多学习记录API封装函 ...

  5. php数据迁移脚本,Laravel中数据迁移与数据填充的详细步骤

    前言 这是一篇基础教程,对标 Laravel 文档中的数据迁移和数据填充,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍把. 关于Laravel数据库迁移的理解 最初看到laravel框 ...

  6. Laravel 实践之路: 数据库迁移与数据填充

    数据库迁移实际上就是对数据库库表的结构变化做版本控制,之前对数据库库表结构做修改的方式比较原始,比如说对某张库表新增了一个字段,都是直接在库表中执行alter table xxx add .. 的方式 ...

  7. Laravel学习笔记4,文件上传,分页,验证码,数据表和迁移

    目录 一.文件上传 二.数据分页 三.验证码 Return Image Return URL Return HTML 六.响应处理 一.文件上传 在laravel, 里面实现文件的上传是很简单的,压根 ...

  8. laravel mysql rand_laravel如何从mysql数据库中随机抽取n条数据(高性能) - Laravel学习网...

    laravel如何高性能地从mysql数据库中随机获取n条数据,有时候我们常常会需要从数据库随机获取数据,比如:给工作人员随机分配10个订单,随机从数据库中随机抽查100个用户:这样我们就需要随机从数 ...

  9. 【C语言进阶深度学习记录】三十五 程序中的堆、栈以及静态存储区(数据区)

    学习交流加 个人qq: 1126137994 个人微信: liu1126137994 学习交流资源分享qq群: 962535112 在我之前学习底层的知识的时候,也写过相关的内容.可以对比的学习:[软 ...

  10. MySQL学习记录 (三) ----- SQL数据定义语句(DDL)

    相关文章: <MySQL学习记录 (一) ----- 有关数据库的基本概念和MySQL常用命令> <MySQL学习记录 (二) ----- SQL数据查询语句(DQL)> &l ...

最新文章

  1. 分布式事务开局第一篇,从数据库事务隔离级别说起
  2. 从浏览器多进程到JS单线程,JS运行机制最全面的一次梳理
  3. 中国银行业100强发布,头部名企为何选择永洪科技?
  4. C语言 函数递归例题解析
  5. 前端学习(1290):nodejs模块化的开发导出另一种方式
  6. 如何阅读一本书~阅读的层次
  7. 微信小程序 navigator 用来实现页面跳转功能
  8. java 同步异步_Java中的同步于异步
  9. 用python建云盘_实用的Python(3)超简单!基于Python搭建个人“云盘”
  10. 学生信息管理系统(c++源代码实现)
  11. delphi 获取数组长度_C++可变长的数组,老司机手把手教你实现!
  12. 计算机基础一级证exlse函数,原创—EXCEL自定义函数完成CPK/PPK/CP/PP/CPU/CPL等的计算...
  13. java c 语言之父_Java之父评价C语言之父:我用尽了形容词
  14. 代码检查技术Checkstyle与p3c调研
  15. 各行业赫芬达尔指数表(2013-2018年)
  16. PCB通孔类焊盘封装
  17. 关于hibernate检索策略
  18. SATA串口硬盘设置、分区及安装
  19. 阿里云部署SVN服务器
  20. 如何在Vue3中使用router

热门文章

  1. php5 ereg,ereg / eregi替代PHP 5.3
  2. 2.2.9 12306火车订票验证码处理
  3. SpringBoot简单实现上传图片到七牛云
  4. 企业级用户画像: 价格敏感度模型-PSM
  5. 微信公众号接口开发--回复消息
  6. [0CTF 2016]piapiapia
  7. 工程师思维的核心 |《转向:用工程师思维解决商业难题》
  8. Android基础Activity篇——创建一个活动(Activity)
  9. ICP-MS和ICP-AES的区别与检出限
  10. python教你画一棵树