[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