本文实例讲述了Laravel框架使用Seeder实现自动填充数据功能。分享给大家供大家参考,具体如下:

要查看代码,可以点击链接:https://github.com/laravel/framework

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

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();

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

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框架的PHP程序设计有所帮助。

php的seeder是什么,Laravel框架使用Seeder实现自动填充数据功能相关推荐

  1. 基于simple-robot框架写的qq自动摸鱼功能:java

    然后的话,里面需要注册一些api,截止到发帖前这些接口都是免费的,一天可以获取个一百次,个人用还是够够的. 注意:因为我太马虎,不小心把源码丢在了上家公司,所以导致现在有一个GroupConfig文件 ...

  2. laravel框架中文手册_Laravel框架的这些你都懂的话,它核心架构基本就懂了

    使用过arave框架的朋友都知道laravel框架里面除了提供一些基本的功能(如控制器.视图.模型)之外,还有中间件.门面.契约等,这些东西是如何在laravel框架运用起来的呢?今天就和大家详聊一下 ...

  3. php框架所用到的核心概念,【PHP】PHP现代框架代表-Laravel框架核心技术特性

    一.php语言特点及发展现状 1.服务端脚本语言,自由度太大 ,一个业务逻辑可言写在模型里,控制器里,也可以单独封装成一个类,甚至可以嵌入到html里,这样势必会造成混乱,业务逻辑散落在各处,尤其对于 ...

  4. php的laravel框架下载,PHP 之 Laravel 框架安装及相关开源软件

    Laravel 被称为简洁.优雅的PHP开发框架,但第一次接触此框架的人有不少都卡在了安装上,其实在 Linux 下只需要很简单的几步就可以搞定,这里我们以 CentOS 下 PHP + Nginx ...

  5. php larval框架运行环境,Laravel框架的运行环境配置(一)

    Laravel框架 学习参考: Laravel的特点; 单一入口:所有请求必须从单入口开始,主要是关于管理[统一的参数过滤] MVC的思想 ORM操作数据库 一个模型对应数据库里面的一张表,对象的属性 ...

  6. laravel框架整体架构

    使用过arave框架的朋友,大家都知道laravel框架里面除了提供一些基本的功能(如控制器.视图.模型)之外,还有中间件.门面.契约等,这些东西为啥在laravel框架存在呢?今天就给大家说说. 首 ...

  7. 付费测算源码技术细节解析:使用Laravel框架实现的星座运势、塔罗牌、牛年运程、宝宝起名、月老姻缘、起名算命等多个功能模块

    技术文档:付费测算源码 1. 简介 本文档介绍了付费测算源码的技术细节,包括使用的技术.架构.数据库设计.代码结构和功能模块等.本源码提供了星座运势.塔罗牌.牛年运程.宝宝起名.月老姻缘.起名算命等多 ...

  8. php模拟关注微博,PHP基于laravel框架获取微博数据之一 模拟新浪微博登录

    参考资料: http://www.csuldw.com/2016/11/10/2016-11-10-simulate-sina-login/ http://blog.csdn.net/fly_leop ...

  9. php rsa2 微博,PHP 基于laravel框架获取微博数据之一 模拟新浪微博登录

    模拟新浪微博登录是抓取新浪数据的基础,网上的参考资料大多介绍的是用Python开发,有一篇使用php模拟登录的资料还是在phpcms中实现的,也没有太深入分析. PS:网上资料来源比较乱,不知道php ...

  10. laravel框架学习之路(一)前后台用户认证分离

    准备工作: 1.下载laravel框架 2.配置好项目(数据库连接以及虚拟主机) 开始: 前台用户认证laravel已经为我们写好了,此部分可参考官方文档 创建模型(以adminstrator为例) ...

最新文章

  1. kubernetes API Server 权限管理实践
  2. WKWebView不显示提示框(Swift)
  3. 河南科技大学828计算机网络,2017年河南科技大学信息工程学院828计算机网络之数据库系统概论考研导师圈点必考题汇编...
  4. sql 2008 找不到本地服务器名称,出现在 sys.servers 中找不到服务器 apos;***\SQLEXPRESS’。请验证指定的服务器名称是否正确的解决方法 – 龙生时代...
  5. REST API的演变
  6. python与html5搭建聊天室_html5 websocket 新版协议聊天室 服务端(python版)
  7. Leetcode每日一题:108.convert-sorted-array-to-binary-search-tree(有序数组转成BST)
  8. WebService处理Map
  9. python数据分析 制图_Python与开源GIS:数据处理、空间分析与地图制图
  10. 计算机java毕业设计选题汇总(2022)
  11. S的Qt界面预览和QtCreator的界面预览快捷键
  12. python人像美颜_人像美颜美妆算法入门必备
  13. 以存储为例说明设备busy的解决方法
  14. 无私数据分享:Chartboost的使用
  15. Dynamic Web Module 4.0 requires Java 1.8 or newer.
  16. android. 长图加载
  17. 虚拟主机和物理服务器有什么不同
  18. linux关闭进程命令kill
  19. JS 实现网页的简体繁体切换
  20. dell 7040m 黑苹果_感受下价值三千多的移动硬盘:Dell移动Thunderbolt? 3固态硬盘

热门文章

  1. 【esp32-s3】6.2 文件系统——文件夹列表
  2. python3GUI--微博图片爬取工具V1.5 By:PyQt5(附源码)
  3. psd格式图片保存自己需要的png图片
  4. c# winform 制作统计图
  5. linux怎么进入系统安装界面,Linux图形化界面安装全过程
  6. Java岗大厂面试百日冲刺 - 日积月累,每日三题【Day17】—— 数据库4
  7. php如何获取视频文件分辩率,视频分辨率怎么看 查看视频分辨率、帧率、尺寸、以及编码器等详细参数...
  8. linux 关机流程 init exit,Linux开关机命令(shutdown,reboot,halt,init),haltinit
  9. 用于暴露感测的太阳传感器_凯利讯半导体
  10. 北航计算机研究院,计算机学院-北航研究生院-北京航空航天大学