[TOC]
# 数据填充
## 简介
所有的填充类都放在`database/seeds`目录下。你可以随意为填充类命名, 但是更建议您遵守类似`UsersTableSeeder`的命名规范。通常, Laravel 默认定义了一个`DatabaseSeeder`类。通过这个类,你可以用`call`方法来运行其它的 seed 类从而控制数据填充的顺序。
## 编写 Seeders
```
// 生成 Seeder
$ php artisan make:seeder UsersTableSeeder
```
一个 seeder 类只包含一个默认方法:`run`。 这个方法会在执行`db:seed`这个[Artisan 命令](https://learnku.com/docs/laravel/5.8/artisan)时被调用。 在`run`方法里你可以根据需要在数据库中插入数据。你也可以用[查询构造器]或[Eloquent 模型工厂]来手动插入数据。
> 提示:[批量赋值保护]会在数据填充时自动禁用。
```
// 添加一条数据插入语句
<?php
use Illuminate\Support\Str;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
class DatabaseSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
DB::table('users')->insert([
'name' => Str::random(10),
'email' => Str::random(10).'@gmail.com',
'password' => bcrypt('secret'),
]);
}
}
```
### 使用模型工厂
当然,手动为每个模型填充指定属性很麻烦。作为替代方案,你可以使用[model 工厂](https://learnku.com/docs/laravel/5.8/database-testing#writing-factories)轻松地生成大量数据库数据。 首先, 阅读[model 工厂文档](https://learnku.com/docs/laravel/5.8/database-testing#writing-factories)来学习如何定义工厂文件,一旦定义好了你的工厂文件,然后就可以使用`factory`这个辅助函数来向数据库中插入数据。
例如,创建 50 个用户并为每个用户创建关联:
```
/**
* 运行数据库填充。
*
* @return void
*/
public function run()
{
factory(App\User::class, 50)->create()->each(function ($u) {
$u->posts()->save(factory(App\Post::class)->make());
});
}
```
### 调用其它 Seeders
```
// 在 DatabaseSeeder 类中,你可以使用 call 方法来运行其它的 seed 类。
/**
* 运行数据库 seeds。
*
* @return void
*/
public function run()
{
$this->call([
UsersTableSeeder::class,
PostsTableSeeder::class,
CommentsTableSeeder::class,
]);
}
```
## 运行 Seeders
```
// 重新生成 Composer 的自动加载器
$ composer dump-autoload
// 填充数据库
$ php artisan db:seed
// 指定一个特定的 seeder 类
$ php artisan db:seed --class=UsersTableSeeder
// 回滚并重新运行所有迁移,重建数据库
$ php artisan migrate:refresh --seed
```
- 入门指南
- 安装
- 部署
- 基础功能
- 路由
- 中间件
- CSRF 保护
- 控制器
- 请求
- 响应
- 视图
- URL
- Session
- 表单验证
- 错误
- 日志
- 前端开发
- Blade 模板
- 本地化
- 脚手架
- 编译资源 Mix
- 安全相关
- 用户认证
- API 认证
- 综合话题
- 命令行
- 广播
- 缓存
- 集合
- 事件
- 文件存储
- 辅助函数
- 邮件发送
- 消息通知
- 扩展包开发
- 队列
- 任务调度
- 数据库
- 快速入门
- 查询构造器
- 分页
- 数据库迁移
- 数据填充
- Redis
- Eloquent ORM
- 快速入门
- 速查表
- Artisan
- Auth
- Blade
- Cache
- Collection
- Composer
- Config
- Container
- Cookie
- DB
- Environment
- Event
- File
- Helper
- Input
- Lang
- Log
- Model
- Pagination
- Queue
- Redirect
- Request
- Response
- Route
- SSH
- Schema
- Security
- Session
- Storage
- String
- URL
- UnitTest
- Validation
- View