Laravel框架使用Seeder实现自动填充数据功能
本文实例讲述了laravel框架使用seeder实现自动填充数据功能。分享给大家供大家参考,具体如下:
要查看代码,可以点击链接:
laravel自动填充数据使用的是seeder类
<?php use 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();
这个函数会清空这个模型所对应的数据表,所以请慎重使用。
<?php use 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=你要执行的类名称
更多关于laravel相关内容感兴趣的读者可查看本站专题:《laravel框架入门与进阶教程》、《php优秀开发框架总结》、《php面向对象程序设计入门教程》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家基于laravel框架的php程序设计有所帮助。
上一篇: 网红店营销应该怎么做?
下一篇: 简单好用 网红营销的6个技巧
推荐阅读
-
Laravel框架实现的使用smtp发送邮件功能示例
-
Laravel框架使用Seeder实现自动填充数据功能
-
Laravel框架使用monolog_mysql实现将系统日志信息保存到mysql数据库的方法
-
Android使用AutoCompleteTextView实现自动填充功能的案例
-
PHP框架Laravel中使用UUID实现数据分表操作示例
-
JAVAEE——BOS物流项目09:业务受理需求分析、创建表、实现自动分单、数据表格编辑功能使用方法和工作单快速录入
-
laravel使用Faker数据填充的实现方法
-
在 Laravel 中使用 Laravel Searchy 扩展包实现基于数据库的轻量级搜索功能
-
Laravel框架实现的使用smtp发送邮件功能示例
-
Laravel框架使用Seeder实现自动填充数据功能