# 數據庫 —— 填充數據
## 1、簡介
Laravel包含了一個簡單方法來填充——使用填充類和測試數據。所有的填充類都位于`database/seeds`目錄。填充類的類名完全由你自定義,但最好還是遵循一定的規則,比如可讀性,例如`UserTableSeeder`等等。安裝完Laravel后,會默認提供一個`DatabaseSeeder`類。從這個類中,你可以使用`call`方法來運行其他填充類,從而允許你控制填充順序。
## 2、編寫填充器
要生成一個填充器,可以通過[Artisan命令](http://laravelacademy.org/post/170.html)`make:seeder`。所有框架生成的填充器都位于`database/seeders`目錄:
~~~
php artisan make:seeder UserTableSeeder
~~~
一個填充器類默認只包含一個方法:`run`。當Artisan命令`db:seed`運行時該方法被調用。在`run`方法中,可以插入任何你想插入數據庫的數據,你可以使用[查詢構建器](http://laravelacademy.org/post/126.html)手動插入數據,也可以使用Eloquent[模型工廠](http://laravelacademy.org/post/238.html#model-factories)。
舉個例子,讓我們修改Laravel安裝時自帶的`DatabaseSeeder`類,添加一個數據庫插入語句到`run`方法:
~~~
<?php
use DB;
use Illuminate\Database\Seeder;
use Illuminate\Database\Eloquent\Model;
class DatabaseSeeder extends Seeder{
/**
* 運行數據庫填充
*
* @return void
*/
public function run()
{
DB::table('users')->insert([
'name' => str_random(10),
'email' => str_random(10).'@gmail.com',
'password' => bcrypt('secret'),
]);
}
}
~~~
### 2.1 使用模型工廠
當然,手動指定每一個模型填充的屬性是很笨重累贅的,取而代之的,我們可以使用模型工廠來方便的生成大量的數據庫記錄。首先,查看[模型工廠文檔](http://laravelacademy.org/post/238.html#model-factories)來學習如何定義工廠,定義工廠后,可以使用幫助函數`factory`來插入記錄到數據庫。
舉個例子,讓我們創建50個用戶并添加關聯關系到每個用戶:
~~~
/**
* 運行數據庫填充
*
* @return void
*/
public function run(){
factory('App\User', 50)->create()->each(function($u) {
$u->posts()->save(factory('App\Post')->make());
});
}
~~~
### 2.2 調用額外的填充器
在`DatabaseSeeder`類中,你可以使用`call`方法執行額外的填充類,使用`call`方法允許你將數據庫填充分解成多個文件,這樣單個填充器類就不會變得無比巨大,只需簡單將你想要運行的填充器類名傳遞過去即可:
~~~
/**
* 運行數據庫填充
*
* @return void
*/
public function run(){
Model::unguard();
$this->call(UserTableSeeder::class);
$this->call(PostsTableSeeder::class);
$this->call(CommentsTableSeeder::class);
}
~~~
## 3、運行填充器
編寫好填充器類之后,可以使用Artisan命令`db:seed`來填充數據庫。默認情況下,`db:seed`命令運行可以用來運行其它填充器類的`DatabaseSeeder`類,但是,你也可以使用`--class`?選項來指定你想要運行的獨立的填充器類:
~~~
php artisan db:seed
php artisan db:seed --class=UserTableSeeder
~~~
你還可以使用`migrate:refresh`命令來填充數據庫,該命令還可以回滾并重新運行遷移,這在需要完全重建數據庫時很有用:
~~~
php artisan migrate:refresh --seed
~~~
- 前言
- 序言
- 序言 ―― 發行版本說明
- 序言 ―― 升級指南
- 序言 ―― 貢獻代碼
- 開始
- 開始 ―― 安裝及配置
- 開始 ―― Laravel Homestead
- 基礎
- 基礎 ―― HTTP路由
- 基礎 ―― HTTP 中間件
- 基礎 ―― HTTP 控制器
- 基礎 ―― HTTP 請求
- 基礎 ―― HTTP 響應
- 基礎 ―― 視圖
- 基礎 ―― Blade模板
- 架構
- 架構 ―― 一次請求的生命周期
- 架構 ―― 應用目錄結構
- 架構 ―― 服務提供者
- 架構 ―― 服務容器
- 架構 ―― 契約
- 架構 ―― 門面
- 數據庫
- 數據庫 ―― 起步
- 數據庫 ―― 查詢構建器
- 數據庫 ―― 遷移
- 數據庫 ―― 填充數據
- Eloquent ORM
- Eloquent ORM ―― 起步
- Eloquent ORM ―― 關聯關系
- Eloquent ORM ―― 集合
- Eloquent ORM ―― 調整器
- Eloquent ORM ―― 序列化
- 服務
- 服務 ―― 用戶認證
- 服務 ―― Artisan 控制臺
- 服務 ―― Laravel Cashier(交易)
- 服務 ―― 緩存
- 服務 ―― 集合
- 服務 ―― Laravel Elixir
- 服務 ―― 加密
- 服務 ―― 錯誤&日志
- 服務 ―― 事件
- 服務 ―― 文件系統/云存儲
- 服務 ―― 哈希
- 服務 ―― 幫助函數
- 服務 ―― 本地化
- 服務 ―― 郵件
- 服務 ―― 包開發
- 服務 ―― 分頁
- 服務 ―― 隊列
- 服務 ―― Redis
- 服務 ―― Session
- 服務 ―― Envoy 任務運行器(SSH任務)
- 服務 ―― 任務調度
- 服務 ―― 測試
- 服務 ―― 驗證