php的seeder是什么,Laravel框架使用Seeder实现自动填充数据功能
本文实例讲述了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实现自动填充数据功能相关推荐
- 基于simple-robot框架写的qq自动摸鱼功能:java
然后的话,里面需要注册一些api,截止到发帖前这些接口都是免费的,一天可以获取个一百次,个人用还是够够的. 注意:因为我太马虎,不小心把源码丢在了上家公司,所以导致现在有一个GroupConfig文件 ...
- laravel框架中文手册_Laravel框架的这些你都懂的话,它核心架构基本就懂了
使用过arave框架的朋友都知道laravel框架里面除了提供一些基本的功能(如控制器.视图.模型)之外,还有中间件.门面.契约等,这些东西是如何在laravel框架运用起来的呢?今天就和大家详聊一下 ...
- php框架所用到的核心概念,【PHP】PHP现代框架代表-Laravel框架核心技术特性
一.php语言特点及发展现状 1.服务端脚本语言,自由度太大 ,一个业务逻辑可言写在模型里,控制器里,也可以单独封装成一个类,甚至可以嵌入到html里,这样势必会造成混乱,业务逻辑散落在各处,尤其对于 ...
- php的laravel框架下载,PHP 之 Laravel 框架安装及相关开源软件
Laravel 被称为简洁.优雅的PHP开发框架,但第一次接触此框架的人有不少都卡在了安装上,其实在 Linux 下只需要很简单的几步就可以搞定,这里我们以 CentOS 下 PHP + Nginx ...
- php larval框架运行环境,Laravel框架的运行环境配置(一)
Laravel框架 学习参考: Laravel的特点; 单一入口:所有请求必须从单入口开始,主要是关于管理[统一的参数过滤] MVC的思想 ORM操作数据库 一个模型对应数据库里面的一张表,对象的属性 ...
- laravel框架整体架构
使用过arave框架的朋友,大家都知道laravel框架里面除了提供一些基本的功能(如控制器.视图.模型)之外,还有中间件.门面.契约等,这些东西为啥在laravel框架存在呢?今天就给大家说说. 首 ...
- 付费测算源码技术细节解析:使用Laravel框架实现的星座运势、塔罗牌、牛年运程、宝宝起名、月老姻缘、起名算命等多个功能模块
技术文档:付费测算源码 1. 简介 本文档介绍了付费测算源码的技术细节,包括使用的技术.架构.数据库设计.代码结构和功能模块等.本源码提供了星座运势.塔罗牌.牛年运程.宝宝起名.月老姻缘.起名算命等多 ...
- php模拟关注微博,PHP基于laravel框架获取微博数据之一 模拟新浪微博登录
参考资料: http://www.csuldw.com/2016/11/10/2016-11-10-simulate-sina-login/ http://blog.csdn.net/fly_leop ...
- php rsa2 微博,PHP 基于laravel框架获取微博数据之一 模拟新浪微博登录
模拟新浪微博登录是抓取新浪数据的基础,网上的参考资料大多介绍的是用Python开发,有一篇使用php模拟登录的资料还是在phpcms中实现的,也没有太深入分析. PS:网上资料来源比较乱,不知道php ...
- laravel框架学习之路(一)前后台用户认证分离
准备工作: 1.下载laravel框架 2.配置好项目(数据库连接以及虚拟主机) 开始: 前台用户认证laravel已经为我们写好了,此部分可参考官方文档 创建模型(以adminstrator为例) ...
最新文章
- kubernetes API Server 权限管理实践
- WKWebView不显示提示框(Swift)
- 河南科技大学828计算机网络,2017年河南科技大学信息工程学院828计算机网络之数据库系统概论考研导师圈点必考题汇编...
- sql 2008 找不到本地服务器名称,出现在 sys.servers 中找不到服务器 apos;***\SQLEXPRESS’。请验证指定的服务器名称是否正确的解决方法 – 龙生时代...
- REST API的演变
- python与html5搭建聊天室_html5 websocket 新版协议聊天室 服务端(python版)
- Leetcode每日一题:108.convert-sorted-array-to-binary-search-tree(有序数组转成BST)
- WebService处理Map
- python数据分析 制图_Python与开源GIS:数据处理、空间分析与地图制图
- 计算机java毕业设计选题汇总(2022)
- S的Qt界面预览和QtCreator的界面预览快捷键
- python人像美颜_人像美颜美妆算法入门必备
- 以存储为例说明设备busy的解决方法
- 无私数据分享:Chartboost的使用
- Dynamic Web Module 4.0 requires Java 1.8 or newer.
- android. 长图加载
- 虚拟主机和物理服务器有什么不同
- linux关闭进程命令kill
- JS 实现网页的简体繁体切换
- dell 7040m 黑苹果_感受下价值三千多的移动硬盘:Dell移动Thunderbolt? 3固态硬盘
热门文章
- 【esp32-s3】6.2 文件系统——文件夹列表
- python3GUI--微博图片爬取工具V1.5 By:PyQt5(附源码)
- psd格式图片保存自己需要的png图片
- c# winform 制作统计图
- linux怎么进入系统安装界面,Linux图形化界面安装全过程
- Java岗大厂面试百日冲刺 - 日积月累,每日三题【Day17】—— 数据库4
- php如何获取视频文件分辩率,视频分辨率怎么看 查看视频分辨率、帧率、尺寸、以及编码器等详细参数...
- linux 关机流程 init exit,Linux开关机命令(shutdown,reboot,halt,init),haltinit
- 用于暴露感测的太阳传感器_凯利讯半导体
- 北航计算机研究院,计算机学院-北航研究生院-北京航空航天大学