要查看代码,可以点击

或者转到链接:https://github.com/laravel/framework

Laravel自动填充数据使用的是Seeder类

<?phpuse Illuminate\Database\Seeder;
use Illuminate\Database\Eloquent\Model;class DatabaseSeeder extends Seeder
{/*** Run the database seeds.*/public function run(){//}}class MyTableSeeder extends Seeder
{public function run(){//}
}

你自定义的Seeder只有一个run函数,里面写你的自动填充步骤

大家会注意到这两个函数

Model::unguard();//你的填充操作Model::reguard();

曾经对这两个函数非常疑惑,到底是干什么用的,只能推测是一对互为反作用的函数。于是去查了下源代码。

在目录\vendor\laravel\framework\src\Illuminate\Database\Eloquent下的Model.php下定义了这两个函数

/*** Disable all mass assignable restrictions.** @param  bool  $state* @return void*/public static function unguard($state = true){static::$unguarded = $state;}/*** Enable the mass assignment restrictions.** @return void*/public static function reguard(){static::$unguarded = false;}

看Laravel作者的注释可以知道,是对数据填充限制的操作。

所以unguard在前,reguard在后,unguard负责解除自动填充操作限制,reguard负责恢复限制。

在填充操作之前,建议使用模型的成员函数  

Model::truncate();

这个函数会清空这个模型所对应的数据表,所以请慎重使用。

<?phpuse Illuminate\Database\Seeder;
use Illuminate\Database\Eloquent\Model;class DatabaseSeeder extends Seeder
{/*** Run the database seeds.*/public function run(){Model::unguard();$this->call('PostTableSeeder');Model::reguard();}}class PostTableSeeder extends Seeder
{public function run(){App\Post::truncate();factory(App\Post::class, 1000)->create();}
}

这里有读者会问:为什么我们不把填充操作都写在自带的DatabaseSeeder的run函数里呢?

因为我们开发一个完整的系统时,可能要填充的数据表有很多张,不希望每次都要大量修改这个run函数。我们还希望每次填充都能保留下这个填充的过程,所以我们宁愿新写一个类,然后用$this->call()函数来调用。

接下来我们来谈谈factory。

文件目录\database\factories\ModelFactory.php

$factory->define(App\Post::class, function ($faker) {return ['title' => $faker->sentence(mt_rand(3, 10)),'content' => join("\n\n", $faker->paragraphs(mt_rand(3, 6))),'published_at' => $faker->dateTimeBetween('-1 month', '+3 days'),];
});

虽然能看懂,但是不知道这个$factory变量是什么?因此去查Factory类找。

在目录\vendor\laravel\framework\src\Illuminate\Database\Eloquent的Factory.php找到源代码

/*** Define a class with a given set of attributes.** @param  string  $class* @param  callable  $attributes* @param  string  $name* @return void*/public function define($class, callable $attributes, $name = 'default'){$this->definitions[$class][$name] = $attributes;}

/*** Create an instance of the given model and persist it to the database.** @param  string  $class* @param  array  $attributes* @return mixed*/public function create($class, array $attributes = []){return $this->of($class)->create($attributes);}

开始填充数据,我们还是使用artisan命令行

php artisan db:seed

这个命令会执行你写在DatabaseSeeder.php里面所有的类的run函数,如果以后项目复杂了,没有必要执行已经执行过的,所以在命令行后面加参数,只要执行某个类的run函数即可

php artisan db:seed --class=你要执行的类名称

  

  

  

转载于:https://www.cnblogs.com/sweng/p/6388542.html

Laravel使用Seeder自动填充数据相关推荐

  1. 自动填充数据新增测试数据_用测试数据填充员工数据库

    自动填充数据新增测试数据 In this article, we will examine the process of populating the employee database with d ...

  2. 自动化办公之excel教程(2):各种数据的输入,自动填充数据,表格操作小技巧

    一.各种类型数据的录入 1.数据输入 加粗样式选中单元格后,左上侧会出现字母和数字,如图中的C9,即可在文中输入数据. 2.货币输入 在某一单元格输入框里右键选中设置单元格格式. 3.数字输入 如果我 ...

  3. 解决谷歌浏览器(chrome)input标签自动填充数据的问题,亲测有效

    问题:如题,在谷歌浏览器中,有时input标签会自动填充数据,如用户名密码等... 解决:给input标签加上autocomplete属性, 如果是type="text"就加上au ...

  4. 谷歌浏览器(chrome)input标签自动填充数据的问题(已解决)

    问题:如题,在谷歌浏览器中,有时input标签会自动填充数据,如用户名密码等... 解决:给input标签加上autocomplete属性, 如果是type="text"就加上au ...

  5. php的seeder是什么,【laravel5.1-0.0.6】Seeder自动填充测试数据

    1.Seeder是什么? 是个数据填充器工具: laravel自带database/seeds/DatabaseSeeder.php类: 文件将通过命令生成在 database/seeds/下: 2. ...

  6. Seeder自动填充测试数据

    1.Seeder是什么? 是个数据填充器工具: laravel自带database/seeds/DatabaseSeeder.php类: 文件将通过命令生成在 database/seeds/下: 2. ...

  7. mybatis-plus实现自动填充数据如:数据库中createTime和updateTime

    关于数据库中每个表中,或者会有需要记录表中数据修改的时间.这个时候应该怎么做呢.当然我们的常规做法就是,首先在数据库中添加两个字段 然后在实体类中添加两个属性 private Date createT ...

  8. 浏览器自动填充数据,Cookie清除不了?,这是因为某些浏览器设置了,自动填充账户名密码,造成cookie没有删除的假像。

    一.原因分析 1.查看Cookie是否真的被清除掉了 2.原来是浏览器设置了自动填充密码 二.代码展示: 虽然这个地方清除了,但是由于某些浏览器设置了,自动填充账户名密码,造成cookie没有删除的假 ...

  9. 输入框采用自动填充数据后,变成浅黄色背景

    给input框加上如下代码即可: input:-webkit-autofill { -webkit-box-shadow: 0 0 0px 1000px white inset; border: 1p ...

  10. 网站PHP框架之Laravel5.5(十二)使用Seeder方式向数据库填充数据

    步骤 创建项目 为users表添加字段 数据表迁移(首先需要数据库信息配置正确) 向数据库播种Seeder(创建seeder类) 填充数据 写入数据到数据库的数据表 小补充 网站PHP框架之Larav ...

最新文章

  1. SQL(结构化查询语言)
  2. 控件属性、事件持久化(转)
  3. 高温津贴:关键是消除劳动者“权利贫困”
  4. oracle 查找 psu,Oracle如何检查当前数据库CPU和PSU补丁信息
  5. 微信支付小年上线“点鞭炮,响优惠”活动 大额提现免费券限时发放
  6. docker flask mysql_Docker下Python Flask+Redis+MySQL+RQ队列简单配置
  7. github pages markdown_赏金$25000的GitHub漏洞:通过 GitHub Pages 不安全的Kramdown配置实现多个RCE...
  8. MySQL删除重复数据
  9. MapGuide应用程序演示样例——你好,MapGuide!
  10. 版人人商城V3.7.6开源解密版小程序前端+后端+安装使用视频教程
  11. 百度云盘加速器for mac
  12. matlab中global
  13. Xero系列之 中小企业会计宝
  14. python中读取列表所有元素_python获取所有子元素
  15. fopen()的rb+和rw+ (文件操作的小坑)
  16. 11gR2 RAC vip和network资源的依赖性与频繁failover
  17. 安全面试之WEB安全(一)
  18. 三星i865刷android,三星亮剑,120Hz+1.08亿+高通骁龙865,这才是安卓机皇
  19. AI初创公司新机遇,谷歌苹果竞相收购
  20. oracle 18c ad登陆,Oracle 18c PSU

热门文章

  1. 电脑从硬盘启动计算机,BIOS怎么设置成从硬盘启动?开启计算机或重新启动
  2. C++ 十进制转换为十六进制 ,十进制转换为二进制,十六进制转换为十进制
  3. Outlook设置规则的一点提示
  4. GIS应用类有哪些最新发表的毕业论文呢?
  5. cogs 2235 烤鸡翅
  6. SQL-Server笔记
  7. java halt_System.exit和Runtime halt区别
  8. python 分析泰坦尼克号生还率_如何用Python分析泰坦尼克号生还率?
  9. How long is the way to the Architect?
  10. 11g OCM 考试感悟