Laravel-模型工厂&填充数据

学习笔记,持续更新

总结

数据填充

  • 模型工厂database/factories
  • 数据填充,生成seeder文件,定义填充字段方法
  • Database/Seeder调用call方法
  • 执行migrate:refresh&&db:seed重置数据库

模型工厂

  • define绑定的模型类,以及在闭包中依赖注入Faker
    • 将pwd设置静态变量(全局共享,所有数据密码均一致)
    • 设置需要填充的字段并return

数据填充

  • artisan生成指定seeder文件
    • 引入需要填充的模型类(数据表)命名空间
    • 在run方法中定义执行的模型和插入字段属性、
      • factory(需要生成的模型类)->times(执行次数)->make(生成合集)
      • 模型::insert(模型->makeVisible([模型中被隐藏的字段])->toArray())
      • 设置指定用户,便于在填充后方便测试
  • database/seeds/DatabaseSeeder.php调用call方法执行数据填充
    • 引入基类模型的命名空间
    • 在run方法中临时解除字段注入
      • 调用Model::unguard() 解除字段注入
      • $this->call(需要填充的seeder类文件)
      • Model::regurad()恢复字段注入限制
  • 重置数据库&&快速填充
    • php artisan migrate:refresh 重置数据
    • php artisan db:seed (默认执行所有seeder文件填充) 可通过--class=指定seeder文件
    • php artisan migrate:refresh --seed 同时完成数据库的重置和填充操作

分页

  • 控制器调用模型::paginate(每页显示条数)
  • 视图中调用{!! 模型实例->render() !!}


简介:实例用户

在实际项目开发过程中,经常需要用到假数据对数据库进行填充以方便调试,原始做法是手工对数据库一个个创建,或者从团员的机器导入数据到开发环境中。lara提供一套更现代化、简单易用的数据填充方案。假数据分为两个步骤

  • 对要生成假数据的模型指定字段进行赋值-模型工厂factory
  • 批量生成假数据模型数据填充seeds

模型工厂

lara默认集成了faker拓展包。

//创建模型工厂实例
$faker=Faker\Factory::create()

//$faker->字段()方式调用
//生成用户名
$faker->name;

databases/factories/UserFactory.php
这里写图片描述

define定义一个指定数据模型(如图User)的模型工厂。define接收两个参数

  • 第一个为指定的Eloquent模型类
  • 第二个为闭包函数,接收Fakerphp函数库实例
  • 方法体中生成假数据并为模型指定字段赋值

数据填充

lara中使用seeder对数据库填充测试数据。所有的seeder类文件存放在database/seeds目录下。创建时需要按照驼峰法来命名。LARA中约定了相关配置,例如User模型对应Users表,使用artisan创建seedrs时应命名为UsersTableSeeder

$ php artisan make:seeder UsersTableSeeder

databases/seeds/UsersTbaleSeeder
创建成功后,需要引入需要填充的模型(数据表)的命名空间,并且在run方法中定义相关字段
这里写图片描述

扫描二维码关注公众号,回复: 3109412 查看本文章

接下来还需要在DatabaseSeeder中调用call方法运行指定的假数据填充文件
这里写图片描述

完成上述操作后,可以开始生成假数据了。在此之前建议migrate:refresh重置数据库

//重置数据库
$ php artisan migreate:refresh
//此处没有指定,即执行所有seed文件,可使用 --clas=指定执行填充的文件
$ php artisan db:seed

如果需要单独指定执行UsersTableSeeder数据库填充文件,可以如下

$ php artisan migrate:refresh
$ php artisan db:seed --class=UsersTableSeeder

当然,也可以使用一条命名完成整个数据库重置和填充操作

$ php artisan migreate:refrsh --seed

分页相关

如果在页面一次性读取所有用户,此时网页响应速度会下降,影响性能。可使用分页读取数据库中部分数据

控制器

//在需要分页的地方调用 模型::paginate(读取条数)即可
$user=User::paginate(10);
//绑定参数返回视图
return view('视图',compact('users'));

视图

//类似smarty模版的定界符设定,
//Boostrap框架的样式,渲染出来的视图连接统一带会带上 ?page来指定页数的连接 
//以往的blade模版使用的是{{}}方式,此处需要使用{!! !!}这样生成的html连接才不会被转义

//在视图中添加如下指令
{!! $users->render() !!}

猜你喜欢

转载自blog.csdn.net/zgy0777/article/details/82529232